Restructured Source

Allows for more easily building out other targets (mobile etc.) and
better code separation