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
There 3 setup methods are expected to run in a predefined order (they expect the application to be set).
However, Behat makes no guarantee about the order in which hooks are run.

It would be better to move all this initialization to the constructor instead.