Moved the entire system to using a pointer-based singleton.

Seems to have fixed the issues with singleton not being properly
initialized. Yay event party!

NOTE: Submitting for peer review to merge to master.

CAUTION: This does mean the singleton can be accessed without it being
initialized, resulting in a NULL pointer. There is currenlty NO check for
this.