New architecture based on different ZFS drivers
This adds the functionality of having different ZFS drivers to the snapshotter.
By adding different ZFS drivers, we abstract away from the ZFS implementation such that we can have multiple back-ends. Therefore, it is now possible to use the snapshotter fully of SSH connections.
Also, this abstraction removes the need for having a sync package with sync targets, targets can now be expressed as a ZFS dataset backed by a chosen driver.