Protect from circular references with inside-out storage for callbacks

Here's a pull request, as requested on IRC. Storing the callbacks outside the promise object protects from many [commonly occuring circular references](https://gist.github.com/kraih/11276761) with closures. Sorry for the lack of unit tests, can't think of a good test case at the moment.