Adds support for conditional requests and new way of checking rate limits

This patch changed adds support for making conditional HTTP requests to the API, and introduces a new way to check rate-limits. I switched from merging the keys directly into the response to supplying them under a certain meta key because the merge policy was problematic for the API routes that returned vectors and not a map.
When returning a lazy seq, metadata cannot be maintained on the response itself so this patch adds on each object of the seq the metadata that corresponds to the request with which it was received.