Add a module for user input/interface

This makes user interactions testable (to a certain extent), and more
uniform
Add tests for the user interaction in upload flow