Move manual events into tech controller

Rebased #1415 against stable.
I'm aware of the test player. When there's not too much mocking to be done, I think doing it inline makes the dependencies on the player more explicit and saves the reader from digging around to figure out what a test player actually provides. It does lead to a couple extra lines and some duplication in the tests, though. I'm happy to use the test player utility all the time if that's what you'd prefer.