Allow promises to resolve even after the promise itself deallocates

This way, you can pull out its `signal`, and fully expect it to provide a value in the future, even if the original `Promise` has since disappeared.

Also fixed a deadlock in `Promise.await()`.
A stylistic choice, perhaps, but if you're always gonna force it anyways, why not be `T!`?