Allow reconnect from error handler

So this is the second half of my solution to issue #6. It wraps the underlying error into a "WorkerDisconnectError". If you trap this in your error handler you can then choose to call a Reconnect() method, which reconnects to the server. 

The error also allows you to probe which server has disconnected.

I've added some code to allow the worker to re-register the functions for a particular agent when it reconnects which was necessary to make the test work.

This is a lot more involved than my previous patch so if there's anything you don't like about this approach let me know!