generalize RequestBuilder by adding RequestBuilderT monad transformer

This generalizes the `RequestBuilder` monad into a monad transformer (`RequestBuilderT`), allowing it to operate in any monad. This allows, for example the usage of IO when building a request (useful, for example, when adding a `Date` header to the request).

The previous API had the `RequestBuilder` type as a pure `State` monad, which is operationally equivalent to using a `StateT Identity`, which is what the new `RequestBuilder` is typedef'd to use, so the API should be backwards compatible. Also, previously `buildRequest` was typed to return an `IO Request`, but the actual function did not depend on IO in any way, so it readily generalizes to an arbitrary monad and the API remains backwards compatible.

(Note: I think this is an improvement over my previous pull request: for one thing, we now get Functor and Applicative for free, assuming that the `m` type being used also implements those classes).