Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
After thinking about this more carefully, we thought it might be better to keep this IPC call simple. Without introducing problems with missing or inconsistent directory listings, the variation in the drivers makes getting a reentrant interface right problematic. The other issue here is that whether or not these calls are reentrant, you end up allocating the same amount of memory. Thus, large directories will cause latency in registry requests no matter what.

As an alternative, we can mitigate listing sizes by controlling underlying directory layout. For now, let's keep `List(prefix string) ([]sting, error) as the interface method. We should also define to `List` to not return recursive results. (@dmp42 Was there a reason to support recursive directory listings?)

We can always revisit this in the future if we've made the wrong decision today.