Refactor to allow users to use their own input functions. This will be useful for asking for things like passwords or utilizing input from non-stdin sources.