Rewrite frontend in pure JS

I did the frontend in Clojurescript because it seemed appropriate for ClojureCup but it's way more confusing than if it was just plain JS. This PR also includes some bugfixes around event handling and does some cleanup/style stuff.