Refactor controller manager.

I also added a controller manager test, and fixed a locking problem and a potential race. Integration & e2e tests still pass.
It wasn't testing anything: it was comparing fakeHandler.ResponseBody to itself. I made fake handler stop overwriting ResponseBody, which meant this started comparing the request's body with the response's body, which doesn't work at all.