Consolidate LevelDB storage construction.

There are too many parameters to constructing a LevelDB storage
instance for a construction method, so I've opted to take an
idiomatic approach of embedding them in a struct for easier
mediation and versioning.
Extract index storage into separate types.
Extract HighWatermarking.

Clean up the rest.
Code Review: First pass.
Code Review: Revert.
Merge pull request #346 from prometheus/refactor/storage/componentize

Componentize Storage Subsystems