lvm improvements for thin provisioning

1. Stop reporting sizes of virtual volumes within a volume group.  These volumes do not directly correspond to allocated storage (and, in fact, may be larger than the entire volume group), so they were violating the requirement that the volume group size is equal to the sum of the values of its type instances.

2. Add new plugin instances for thin pool data volumes, thin pool metadata volumes, and traditional (thick) snapshot volumes, each with `used` and `free` type instances.  These volume types can fill up as I/O is performed to their associated thin volumes or origins.  When they run out of free space, they break, so monitoring their disk utilization is useful.

3. Fix a segfault if a volume group contains no volumes.

This PR does not add `used`/`free` reporting for thin volumes and thin snapshots, though these values exist.  They represent the sparseness of the volume (0% used == completely unallocated in the thin pool; 100% used == completely allocated).  So, in contrast to snapshots and thin pools, "100% used" is not a dangerous condition.  These values are only available for active volumes, and thin snapshots are not activated by default, so any such reporting would likely be incomplete.  Nonetheless, it is potentially useful for monitoring which thin volumes are consuming the thin pool capacity, and I can add it if desired.

cc: @cmalfait