Chainable fetch

__Do not review before #89.__

Simpler syntax for `Cache` fetches by using a chainable `Fetch` object.

```swift
cache.fetch(URL: URL).onSuccess { JSON in
    // Do something with JSON
}
```

Inspired by @mattt's use of chainable request/response methods in Alamofire. The implementation is totally different, as fetches can be synchronous when hitting the memory cache and also we don't have a private queue for fetches.
I am wondering if conceptually a `fetchValueForKey` in `Cache` method makes sense now that all the logic is built on top of generic fetchers.