fix(client/controller): multiple views visible

Offline event resulted in password view being shown (waitingForId), but
previously visible view not being hidden (_swapView(null,
this.passwordView).

Replace Controller#_swapView with Controller#_showView, and keep track
of current view (this.currentView).
test(*): remove tests

Tested code is too simple and too well asserted throughout to be worth
writing unit tests for.
refactor(app): refactor, docs and assertions

Move Ring#_stateChanged to Tournament#ringStateChanged to remove the
need to pass the primus object to the rings. Now passing tournament
object, which makes more sense.

Add docs and assertions, rename functions and restructure code.