[bug 1107803] Rewrite Response inference code

Pretty sure there were some edge cases where we wouldn't infer data that
was appropriate to infer. This reworks the code to read better so it's
easier to reason about all the possible cases including the ones we
weren't handling well before.

I also nixed the code that sets the channel. It's not really appropriate
to assume everything is "stable" if no value is provided. Not sure why I
thought that was a hawt idea before.

r?
This test makes sure I didn't fix one thing and break another.