IntegrationTestCase needs to make more sense

The new `IntegrationTestCase` is somewhat complicated, and provides some substantial abstractions.  It also doesn't handle function-based views well in the slightest.  I've reflowed it a bit to make more sense, made it deal with requests more smoothly, and added understanding of function-based views.  And lots and lots of comments.

@meshy @Ian-Foote review please? :)
Maybe a list would be more appropriate - it might be nicer to be able to depend on messages being ordered.