Cleanup and Resolve Extension Bugs

This PR should work out a number of issues that have been lingering, and some that I recently realized were issues with the internal implementation of the extensions API. A lot of specific details can be found in the commit details. Overall big things:

- Anything that was sort of messy that was a "todo" to clean up should be cleaned up
- Everything should be very thoroughly documented with JSDoc
- Extension format has been changed such that there are no conflicts between multiple compile passes
- Any unnecessary subclasses or promise wrappers should be removed

This first commit takes care of a lot, but there is still at least one more needed for a full pass on the compiler, and to ensure that extension tests are passing.