Reorganized package to put interfaces in their own file
changed basically everything. Tried to make everything interfaces. Still a lot of work to make it right