It's time we move the repo from the current style (everything is a header file) to having separate source and header files. This should clean up all the import orders and *_definitions.h files, as well as make it a lot easier to add new drivers etc.
Bounty for a clean PR with minimal changes.