store: Abstract the underlying filesystem functionality

This patch defines class FileStoreBackend, and use it to abstracts
filesystem's functionalities.

Fiemap() and syncfs() related code is moved into class
GenericFileStoreBackend.

All btrfs specific code is moved into class BtrfsFileStoreBackend.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
store: Add (experimental) ZFS parallel journal support

This patch adds ZFS parallel journal support. It uses libzfs provided by
zfsonlinux to access ZFS' functionalities. To enable ZFS parallel journal
support, compile ceph by:

  ./configure --with-libzfs LIBZFS_CFLAGS="-I<libzfs header> -I<libspl header>"
  make

Add following line to osd section of ceph.conf

  filestore zfs_snap = 1

Note: ZFS (no mater parallel journal is enabled or not) does not support
direct IO. To use it as backend FS for OSD, you need to add following line
to osd section of ceph.conf

  journal aio = 0
  journal dio = 0

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>