Return thenables for lazy evaluation instead of a promise

@blacksonic @gaastonsr

Would really appreciate it if you guys could take a look. I switched from returning a promise with deferred resolution to a thenable. Basically the new `thenable` method builds up an object that looks and works like a promise from the promise implementation in use. It won't actually create a promise until a method on the return value (e.g. `then` or `catch`) is invoked. 

I'd like to try to handle some edge cases a little better but I can definitely ship this in December.

Closes #8