Abstract out the 'user interaction' in the run task.

* Fix bug with JLine2 upgrade where Ctrl-D isn't recognized
* Add PlayInteraction trait that describes how play blocks for input.
* Wire in the default interaction mode as Console/Terminal.