Promise Trait

Still needs to be made compatible with jQuery Deferred for maximum
usefulness.