Optimize promise/deferred creation

- Use constructors instead of Object.create.
- Remove instance structure changes.
- Reuse functions if possible.

Creating instances from prototypes via `Object.create` is [slower](http://jsperf.com/create-vs-constructor) then via constructors, specially on V8 (Chrome, Node).

Using constructors have another minor benefit: on V8, instances are represented with more proper names: `Promise` instead of `makePromise`, and `Deferred` instead of `defer`.
However, constructors are not exposed to the API, and are optimized for internally usage only.

In case there are particular reasons you are using `Object.create`, please, feel free to ignore this change.