adding a lazily evaluated promise type

Lazily evaluating promises allows me to pass around Promise objects that are only executed if they're actually needed. 

A good example would be a Promise object representing a user's avatar attached to a User object. If User owns a lazily evaluated Promise for its avatar, I can pass that user around everywhere, and won't have to worry that I'm making unnecessary calls for code that doesn't actually need the avatar. If I never encounter any situations where I need to show their avatar, I can avoid ever having to retrieve it.