Add an efficient task-runner based on Promise.resolve().then if available

This is an efficient implementation of `EnqueueTask` on platforms which implement `Promise` natively (even if we end up overriding the native `Promise` to work around bugs).

From https://github.com/Raynos/observ-hash/issues/2#issuecomment-35857671