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
Boolean: yes, thanks.

For interactive runs I'm saying the *input* is an interactive one, but passing the `--no-interaction` flag - I could see if this makes a difference but at the moment it's overidden at the CLI