Convert System from monkey-patch to class instance.

This will allow downstream code to extend the implementation of System