Support/refactor request constructor

This came out of the request refactoring #1071
In this PR I refactored the Request constructor, mostly by extracting logic into
separate functions. I also took some initiative to move general helper functions in to the helper file.

Review please: @mikeal @FredKSchott @nylen 
it might be nice to add a short description of what these functions do in a comment above the function (it's pretty obvious in the context of this change, but if I was scanning the file and saw this I'd have to dig to find out what was going on / why we used this)