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? :)
If we need to keep python 2 I think we can just not pass *args to the view. I don't think we use that functionality often (or at all) anyway.