first shot at defer()
resolve should not be able to be called multiple time thereby changing the value of the promised result
cleanup, move TODO's to TODO
use isPromise to distinguish promises from other values
seperate promise from resolver to code within the principle of least authority: giving a promise only gives the authority to observe the resolution, giving a resolver only gives authority to determine the resolution, one should not implicitly give the other
alter then method to return promises for the return value of their given callback
chained composition without errror propagation, ref isn't even being used to recur inside resolve, confusion ensues
implementation at this point uses 'thenable' promises and seperates the 'promise' and 'resolve' components of deferred