Extras refactor

Here is my proposal on a restructure.  It will allow for easier testing.  I did introduce a test that did discover a few undefined items, so this can clean stuff up pretty quick.

I hate how github doesn't show the file renames instead of a diff.
This got moved into a separate singleton