promises should ensure there's a stack trace, and create one if not

When a promise is uncaught (or promising thinks it's uncaught) it throws an error, but this usually does not have a stack trace. This makes tracking down your potential problem-areas difficult. 

This patch will create a stack track if one does not exist, during async errors this isn't too helpful (but not any less helpful) because the stack trace just tracks down to the timer. However for non-async errors this is much more helpful, giving you a stack of places in the code touched.