Improved Hub Framework, and Better Mouse interactions.

The Hub object has been modified to allow easier extensions.
There is a mapping concept which maps between SpokeTypes and Classes.
The Hub will store and return the Spoke as the registered Class type.
It will not store or return more derived pointer types.
This enforces good design as the registered class need to be used
from the registered class which acts as an interface.
*Note* the hub can also stores multiple numbers of spokes of the same type.
This is done by assigning an index number to the spoke during setting on the hub.
This is currently being used by the Link Hub. It registers two Drawable spoke types,
the LinkHeadDrawable, and the LinkTailDrawable.
It is proving to be quite useful.

The mouse interaction framework is also improving slowly.
We can now select, deselect, and move nodes.
We can now link up plugs also.
The main selectable items are the nodes.
The input or the output plugs are not selectable.
The links are only selected while dragging.
Then cannot be in a selected state otherwise (in contrast to the nodes).
Once you select a a link via the head of the tail you will immediately go into
a mode where you drag out the link.
Nodes are dragged by holding the left mouse down.
Links are dragged by clicking once at the start, and once again at the destination.
The link will follow the mouse in between these two clicks.

The LinkDrawable's have been split into 2 sub drawables.
The LinkHeadDrawable and the LinkTailDrawable.
This allows us to keep the drawable and interaction framework very clean.
As the mouse is generally interaction with either the head or the tail.
It keeps the logic and responsibility to a simpler and similar level as the other
drawables.