Multi provider support with proper buffering

I realize this is a pretty substantial pull request but it does a number of things.
- Support for multiple plugins
- API
  - Writes handlers and buffering generically so new methods like ```setSuperProperties``` can be added easily (I took it out, but you can easily allow plugins to add their own buffered methods like ```setFoo```)
  - Exposes API on provider so applications can call ```setUsername```, for example, at config time.
- Buffering
  - Only buffers when waiting for a vendor API so component libraries can be instrumented with tracking
  - Can flush buffers immediately upon registration (to make sure things like 'setUsername' gets called before eventTrack
- Support for mixpanel super properties (```mixpanel.register```)
- Tests around a lot of things

I'm happy to work with you on this. We really needed support for multiple tracking services and better control over the buffering.