Major restrucuring of the worker functionality

I tried to modularize the worker and browser functionality. Advantages:

- Created a `Browser` class that encapsulates all the actual browsing and parsing code
- browser is now fully decoupled from worker: a worker creates a browser instance on init
- this also implies writing new "browsers" is easy; e.g. the dummy browsers are only a few lines of trivial code now. Moreover since they are used in the exact same way as normal browsers, the testing is more effective
- Cleaner hierarchy for workers, kotnetlogin and logout only override what they actually do differnt. No code duplication anymore
- kotnetcli.py is clean up: less code and it only has to create a worker and call `go()` on it. This way the `kotnetcli` class can focus on its job: parsing arguments and booting the whole thing 

I think some things are still buggy (eg kotnetlogout and forced), but I can now only test the dummy login and out which work fine (as I am not on Kotnet now). Another thing todo (apart from the modularisation issue here) is better error catching and letting it know to the communicator (`exitFailure(msg)`)