function fetch (uri, options = {}) {
	const {retries = DEFAULT_RETRIES, ...needleOptions} = options
	const existingRequest = requests[uri]

	if (existingRequest) {
		return existingRequest
	}
	const newRequest = httpGet(uri, needleOptions)
		::_do((resp) => checkStatus(uri, resp))
		::retry(retries)::publishReplay().refCount()
	requests[uri] = newRequest
	return newRequest
}
HTTP GET the resource at the supplied URI. if a request to the same URI has
already been made, return the cached (pending) request.
@param  {String} uri - endpoint to fetch data from.
@param  {Object} [options = {}] - optional HTTP and `retries` options.
@return {Observable} - observable sequence of pending / completed request.