support block storage open multiple times
e.g., a single file/image can be mapped multiple times on different hosts by
curve-nbd with extra option `--no-exclusive'
limitations:
1. provided as a shared disk/device WITHOUT data consistent guarantee,
so it's users' responsibility to deal with this problem.
2. each file/image can only open once on each host.
After #172 and #209, source volume data of the clone volume
can be read within the client through SourceReader, and each
source volume was also opened and represented by a FileInstance,
but `FileInstance::mdsclient_` points to `FileClient::mdsClient_`,
so after FileClient is destroyed, `FileInstance::mdsclient_`
becomes dangling pointer.
To fix this problem, we let `FileClient::mdsClient_` be a shared_ptr,
and each FileInstance holds ownership of it.
Signed-off-by: Hanqing Wu <wuhanqing@corp.netease.com>