tiny readline-alike with some batteries included

various notes:
- never set s.mode directly, always use set_mode
