Another shit ton of refactoring also got the gradle to export the api
jar correctly