Split HttpRequestFuture into public and internal interfaces

* HttpRequestFuture exposes a read-only interface
* MutableRequestFuture exposes methods that trigger completion, used internally by the connections and clients
* Make all factories return the correct type of instance they create, adding compiler ensured verification of the return type
* Removed correct type check on factory produced instances
Remote attachment property from request future
Add spec for DefaultHttpRequestFuture