Decouple request creation from request sending

@evert I tried to minimize the size of this changeset (I want to migrate incrementally) so I didn't make any changes to the public apis. Thoughts?