added some more tests, made most calls non-blocking and fixed some behaviors

i.e. deallocating a promise cancels its deferred

pipes on already resolved/rejected deferreds behave properly

pipe in-order execution is better enforced even if pipes are added after the deferred is resolved