Support rate limiting

Re: API-67
can simplify this to

```go
return &TooManyRequestsError{r.Header}
```

The reason we use the pattern of declaring the `error` variable in the `200` status code case is that we need to pass it into a function to assign it data. Here we can initialize the error object in one go (with a struct literal).