Split RequestData responsibilities

- EndpointContext stores endpoint specific attributes that do not vary
  between requests.
- RequestContext stores request specific attributes.
- Rename AttributeRequestDataBuilder as it now only builds up
  the EndpointContext
- Pass the EndpointContext and RRequestContext down the layers to the
  RequestHandlers.

This pull request lays some of the groundwork for my proposed solution for resolving concurrency problems in #20.