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 02:13:37PM -0800, W. Trevor King wrote:
> In the abstract, I'm fine with:
> 
>   List(prefix string, size int, [from string]) ([]string, error)
> 
> where ‘from’ is an optional name used to determine the initial
> offset (e.g. List("/repositories/", 100, "bob").  I'm not sure how
> easy *that* would be to implement in Redis or Elasticsearch or other
> folks that do support the integer offset.

Ah, it looks like you could implement this in Redis if you used sorted
sets [1] and ZRANGEBYSCORE [2] with scores that ensured alphabetic
sorts.

[1]: http://redis.io/topics/data-types#sorted-sets
[2]: http://redis.io/commands/zrangebyscore