Remove transition.wait, use callbacks instead

This commit also removes our dependency on when.js and introduces
a callback argument in transition hooks. Users are expected to call
callback(error) when they're finished doing async stuff. If they
don't have a callback in their argument list, we automatically call
the callback for them for backwards compat.

Fixes #273
Fixes #631 

I have mixed feelings about this PR. Part of me wishes that everyone would get on the same page, realize how cool promises are, use webpack, and be happy. But hey, at least we get:

1. smaller file size
2. 1 less dependency
3. easier compat with browserify