First Commit of Animation

Here it is.

I'm feeling pretty good about the API but the real test will be when someone other than me ports to it or builds their own bot with it. 

If anybody is willing to try this out I will bend over backwards to help them. I need the perspective of someone who is new to it.

I've got some basic documentation over in docs/animation.md but it's not really written well for beginners. Once the API is golden I need to write a wiki page that's more of a tutorial. There is a lot to digest here.

This PR is the culmination of all the discussion in #304 also fixes #362
I have two sets of indices. One set for the cuePoints and one set for the keyFrames. The former is set outside of my call to map. The latter gets updated and recalculated many times within the map. Is there a performance difference between these two examples?:

```
var indices = {
  cuePoints: { left: null, right: null },
  keyFrames: { left: null, right: null }
}
// Set indices.cuePoints
var val = this.bigArray.map(function(keyFrame) {
  // Set indices.keyFrames
});
```
and
```
var cuePointIndices = { left: null, right: null };
// Set cuePointIndices
var val = this.bigArray.map(function(keyFrame) {
  var keyFrameIndices = { left: null, right: null };
  // Set keyFrameIndices
});
```
I've wondered about this before, but rarely would the effect even be measurable. (Here it happens fps * deviceCount times per second).

This is probably analogous to asking if single quotes use less RAM than double quotes :-/