Clean up the Behat suite

The Behat suite has grown a bit unwieldy after multiple layers of new features. This change:

* Splits Application and Filesystem contexts
* Converts most steps to Turnip
* Combines redundant steps
* Replaces stream magic with stubs
* Uses Symfony\ApplicationTester instead of our own object
I'm moving the matchers into separate classes, so will make sure I do this as part of that.