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? :)
I had a go at this one and decided I really didn't like it much - `get_view()` is a lot clearer that work is being done to bring you your view.

I may actually rename it `get_view_method()` for further clarity.