Heavy refactoring, plus some functionality change

Just more menu stuff, the button class is quite cool, my first use of
std::function, so that's nice.