input: implement an input thread and an interpreter

Wrote this in one day. With no real plan on how to do it. I think I'm satisfied with how it turned out. Abusing enums as a way to map things does lead to lots of duplication. Could have reduced it a bit by merging printing and setting variables as a single function but adding a flag check to every assignment would result in a much more cumbersome interpreter. Anyway, it works. I tried adding tab completion(hence the global_cmd_map variable) but I couldn't make it work. Will be added with a later commit.