volume: improve test coverage and minor refactoring

The volume package does not test enough use-cases.

Improve test coverage by adding additional tests and refactoring
current tests to use table testing.

This change introduces a new error var to make testing unsupported
volume type errors easier. This change also renames volume.Interface
to volume.Volume to increase readability.

This change does not introduce any changes in behavior.
Using "Interface" is go style, odd as it is. The rationale is that types should be named for the users of a package, and having people write "volume.Volume" is redundant.