Create and connect viewer sockets from controller
Allow "fd" as an argument name
Properly update username cache after login

Bug introduced by d4496bcf.
Disable activity window if controller doesn't provide stats
Don't connect I/O error handler if io_errors stat is unavailable
Move asynchronous socket connection code into Controller
Pass callback function to Controller.connect_viewer()

rather than reporting the result via signals.