Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
On Mon, Nov 03, 2014 at 03:30:33PM -0800, Brian Bland wrote:
> One thing we could do is change the method signature to `List(prefix
> string, count int, interface{} marker) (keys []string, nextMarker
> interface{}, err error)` and return an untyped (`interface{}`)

I'm fine with this opaque type approach, since I don't see a need to
be intelligent about where you start a list (except for the key
prefix).  It's just a way to pace yourself while you iterate through a
lot of hits.

If we decide to drop the request/response form, we could also list
everything but with a streaming response.  In Python, that would mean
the API returned a generator [1].  That basically hard-codes size to
1, hides the opaque cursor inside the returned generator, and leaves
it up to the backend whether or not it wants to cache upcoming entries
for efficiency.