Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
What would be the use case for using `from` and `size`? How do you see them being used in the registry? If we're concerned about having the prefix at a high enough level being slow, we could make it optionally non-recursive:

```golang
Count(prefix string) (int, error)
List(prefix string, recursive bool) ([]string, error)
```

That should make `List("/", false)` only display `["images", "repositories"]` and `List("/images", false)` significantly less time-consuming than recursively listing *every* directory under /images.