Doing a better job of passing custom request options

- Better handling of request options passed from client to messages and
  adapters.
- CurlAdapter now converts string keys that start with CURL to the equivalent
  CURL_* constant value.
- Added a few extension points to requests and the CurlAdapter
MessageTrait should really be AbstractMessage