Implemented Promises support

Notice on *stop* I reject the promise with the chained context. I know it's contrary to what Dominic said but it seemed to be the best solution, and I couldn't find anything in the specs about the `reason` having to be an error.

Also, I went over the code and think I covered all places where you return from the `animate` method, so please check if I missed anything.