Abstract Base.prototype.prompt to support non-cli env.

This PR refers to #369

I'd like to have some feedback, especially your consideration on how to handle conflicts


- [x] Make `Base.prototype.prompt` calla `adapter.prompt`
- [x] Register a default `TerminalAdapter` to handle CLI interaction
- [x] Adapt tests for Base.prototype.prompt
- [x] Add tests for `TerminalAdapter`
- [x] Define interaction for `conflicter` (`conflict` event? `diff` event? make conflicter a class and pass the adapter?)
- [x] Implement and test this interaction