Major code cleanup + observable pattern

As part of the cleanup, the observable pattern is used to decouple a lot of code. The various -Holder classes are like models, index.js is the presenter.

It's not quite yet 100% MVP since I've tried to keep the changes rather simple. More work can be put into this later.

The diff is larger than it really should be because I replaced tabs with spaces in some files. Jira said he's fine with it, so let's keep things consistent.