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.
@joanromano I also think it's confusing. I don't like that `fetch(fetcher)` does both a set and a get, while `fetch(key)` does only a get. I do think `set` needs a counterpart, which is what `fetch(key)` does but maybe we could use a different name for it. Someone to keep in mind indeed.