Core refactor

Creates namespacing and uses the PSR-4 autoloader utilising namespacing