Update Promise to better match spec

Use typeof to check is callable.
Wrap funcitons in try catch to get async exceptions.