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
each scenario gets its own context instance