Major rewrite. See commit body.

* Implemented the module pattern.

* Added a more robust 'lifecycle manager', which ensures that all
  SchemCanvas objects are notified when all the Components have finished
  loading.

* Added an event registration interface to SchemCanvas, which is what is
  used for the aforementioned notification once Components have finished
  loading.