Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
@wking Before I address your points, fear not, we intend to address #614, in one way or another. We just need to understand the right way to do it.

> Using either a marker string [1] or an opaque marker type [2] seems to
> support all proposed backends.  With the marker stored in the
> registry, the storage backend doesn't need to keep track of open list
> calls, so a reentrant interface is easy.  Or am I missing something?

Yes, the marker or index will support most backends, but the behavior may be different on updates to that directory. With a marker string, an insert before the marker after the first call will lead to a missed entry. With an index, one may have duplicate entries. The behavior between various backends under these conditions may vary greatly, requiring calling code (ie the registry) to handle that variation. By going with the simpler call, we avoid this variation and leave it up to the driver to present a "consistent" view of the directory state.

> How so?  ZRANGEBYSCORE is O(log(N)+M) with N being the number of
> elements in the sorted set and M the number of elements being
> returned.  That scales pretty well.  More importantly, it lets you
> start streaming results from the registry to the client before you've
> finished listing the whole directory.

That's not the case I'm worried about. If we want to iterate over the entries of a large directory to support an API operation, the latency of the registry request will still be proportional to the size of the directory, reentrant or not. This should be avoided, if possible.

Let's proceed with this simplified API and table this discussion, for now. We have collected some really good suggestions but we really need to look at how we can avoid this bottleneck. Once the V2 paths are laid out, we can come back and see if we really need the reentrant API call.