Define ComponentPlugin API type

Just writing down how I think plugins should get registered with the system. Was thinking it'd be nice to do the event thing as a plugin.
I think if we focus on the "statically linked" case before the "dynamically linked case", the problem becomes more tractible, and the delegated storage make sense.

By statically-linked, I mean all of the following:
  1. the set of possible plugins is fixed at compile time
  1. the cluster is configured by selecting from among the possible plugins at either compile time or runtime (via a flag on apiserver).
  1. a thoughtful cluster admin choses from among the options at cluster startup time
  1. changing these options after cluster startup time may break running objects and requires careful thought.