a bunch more refactoring; notable changes:

- don't log a new if state is not altered
- generate our own request id when HTTP_HEROKU_REQUEST_ID is not present
- use a RequestData struct to contain our env stuff instead of various rack-timeout.key-name keys in env