pigcs: refactor driver to have a separate object for accessing the "bus"

should not change behaviour, but allow easier access to the bus outside of the controller class.

Also fix some bug in the simulator to correctly simulate timeouts
gui: add comment on conversion model between A/B <-> X/Y

from chat with Andries.
pigcs: refactor to have one class of Controller per type of control

Avoid mixing every type of control into one big class.

It now can nicely use Object Oriented code.
The only trick is the use of __new__ to detect which class to actually
instantiate by actually asking the physical controller what it can do.
pigcs: clean up args from Controller classes

now that each type of controller has its own class, it's easy to check that only good arguments are passed.