Add request object

This is essentially a bag of everything relating to the request.

Fixes #552.
I think it's better to not default here so that it's evident if it hasn't been set. I'd even be happy with defaulting to `null`.