Implement tag
Implement tag

This commit contains the bulk of changes necessary to implement tags. Tags are
considered the basic unit of configuration for managing backups of zfs datasets.

Each tag consists of:
  * name - unique identifies a tag and its properties
  * scheme - the scheme for sending a tag's datasets. for example, 'ssh'
  * target - the root dataset that will be targeted when datasets with this tag are sent
  * options - a set of key-value pairs that are used when operating on the tag

A tag is created using the 'create' command, which will cause the tag to be stored in
a zfs property. In order for datasets to be sent with those options, they need to be
tagged with that tag using the 'tag' command

arader/zshadow,arader/zfshadow