Cleanup, added logger statements where needed and overhauled the options menu

I've cleaned up the syntax and spacing again for consistency, merged some newlines.

Added Logger.error() in a few places where a custom exception was raised with no feedback.

Most significantly I refactored the menu in options.py. Instead of a huge if-elif block, it's now a cleaner Python dictionary that takes callables as values. Only "back to main menu" is now an if statement, since the return statement needs to be in that scope to work properly.