Wip copy on read

An improved copy-on-read implementation based on the pull request (https://github.com/ceph/ceph/pull/2158) by Min Chen <minchen@ubuntukylin.com>, Li Wang <liwang@ubuntukylin.com> and Yunchuan Wen <yunchuanwen@ubuntukylin.com>. 

The bufferlist holding the entire object from parent is allocated separately.

Also provided a unit test for verifying the implementation.
librbd has an API method "snap_set" that allows you to read an image from a snapshot, not the parent image's snapshot.  In this condition, the image itself is not opened as read-only (i.e. m_ictx->read_only == false) but you effectively are in a read-only mode since you are looking at a snapshot.  

You will see a lot of code like this for handling this case:

```
if (snap_id != CEPH_NOSNAP || ictx->read_only) {
  /// handle read-only FS
}
```