Wrap global.setTimeout to work with mocks

When a mock library (like sinonjs) override global.setTimeout, bluebird
was keeping the original version and was not using the mocked one.
By wrapping the call to global.setTimeout, bluebird will always use the
correct setTimeout implementation.
Make it ready for npm install