Refactoring

+ Stricter typing for vectors
+ Improved validity checking
+ Revised matrix functions
+ Updated docs
+ Moved vector utility functions to Vector3