defer callback or exception

1. avoid zalgo problem (callback is sometimes sync, sometimes async)
2. prevent that promise swallow exception
Merge pull request #21 from gyson/defer-callback

avoid zalgo problem and prevent promise swallowing exception