Preliminary hit testing and interaction framework for Drawables.

Hit testing implemented at the following levels.
1) UnpackedShapes are the lowest level objects which can be hit tested.
2) UnpackedCompShapes are the next level up. They contain UnpackedShapes.
   Default implementation is to check all UnpackedShapes.
3) Drawables are the top level object which can be hit tested against.
   This is where we will likely put in the custom logic to deal with different interactions.

A NodeGraphState objects was added. This keeps track of selected Drawables
like Nodes and plugs and links. It will also keep track of which is our edit and view nodes.

Since Drawables are currently handling the interactions from the user on there own,
they actually take a reference to the NodeGraphState which is owned by the NodeGraphContext.

Example of the custom logic which will be implemented in the NodeGraph Drawables is things
like if a NodeDrawable is hit, it has custom pads/buttons for the edit and view modes.
It will also set this state on the NodeGraphState object.

Other types of logic include selection and deselection. Each drawable currently will
need to handle these and call appropriate methods on the NodeGraphState with themselves
as the argument. For example selecting or deselecting themselves.

This framework is still in flux and may change.

We started using glm swizzling, and tidied up a little bit of the vector math.

We can finally move nodes around.  But the interaction is very limited at the moment.