Majorly revamp client.rs. This turns Client into more of a data store.

The dispatching of events is split off into the Dispatch class, which holds a reference to the Client, and handles dispatching events.
The plugin managing is split off into the PluginRegister class, which Client holds a reference to. The PluginRegister can also now be created before the Client, and passed to the startup function as an argument.
The actual 'Client' struct has turned into more of a data store, just holding ClientConfiguration and PluginRegister objects.

Now, instead of creating a Client to start a connection, connecting is done with a 'create_and_connect' function. This function handles creating the Client, Logger, IrcInterface, Dispatch, and IrcConnection, as well as connecting to irc and sending the initial NICK and USER commands.

The methods which used to be add_listener, add_command, etc. on Client are now register_irc, register_command, etc. on PluginRegister.

This commit also adds implementations of Deref to IrcInterface and Client, so that all of the fields of ClientConfiguration are accessible directly on Client, and all of the fields of Client and ClientConfiguration are accessible directly on IrcInterface.

This is in general also preperation for storing data such as current nick, and joined channels in the Client struct.