[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?
I rewrote this code to make it easier to read and reason about. I'm pretty sure it's moar korrect than before. Kick me if the new code doesn't make sense and/or the comments are wrong/confusing.