Opportunistically make a few classes implement MetadataReader.

Relates to #49. As discussed in the issue tracker, MetadataReader
should be renamed RandomAccessMetadataReader, and another
SequentialMetadataReader interface added.

This would be a breaking API change, so is deferred for now.