Enforce the implicit state machine in HttpConnection.

This checks that calls into HttpConnection occur in the correct
sequence.

Once this is merged I can follow up by making HttpConnection
responsible for its own pooling rather than relying on HttpEngine
to do that work.