Lots of these changes mean that we're requiring certain values to either by typed properly or return the expected value. If it doesn't there should be a fatal exception thrown which we can followup in the logs and won't go silently suppressed.
Split up files with multiple classes to multiple files for autoload, sorry for baking this into this commit.