Splits the client functionality into a frontend and backend for simplicity down the line, fixes some multithreading bugs, moves the timing loop into the server from the core, and begins fleshing out event passing