Split CPP files to 1 per class.

I rebased this myself with the latest develop branch, and ran the test script on Mac and it worked for me.
Eric also reports that he tested it on Windows, Linux, and Mac.
I'm merging it now because it's a big one and I don't want to have to rebase it again. If there are any other issues we can fix those going forward before merging back to master.

===> FYI, there was a pre-existing travis build failure before I merged this. This we can also just fix going forward.