* UI pieces for components are sent from the component through the manager
  to the admin client.

* admin client:
  - user clicks the component in the UI and triggers a UI load
  - view tells the model the ui needs to be loaded
  - admin model asks the remote (manager) to get the md5sum for the UI of
    this component
  - manager proxies this call on to the correct component through the
    ComponentAvatar
  - actual component returns self.bundle.md5sum()
  - admin model checks if it has a directory in the cache with this md5sum
  - if not, admin model asks remote to get the zip for the UI of this component
  - manager proxies
  - actual component returns self.bundle.zip()
  - admin model unzips and stores this zip in a dir named after md5sum in cache
  - admin model signals the view that the UI is ready to be executed
  - view executes UI

