Use async AMD methods

This pull request is under :construction:, things are likely to be broken. I am opening it now, to get feedback and discussion on the implmentation.

---

As @neonstalwart  points out in #523, there's opportunities for the AMD loader to bite us, when loading dependencies asynchronously. This only happens when using a non-built version of Sinon, but I think it's worth fixing.

The [calls to synchronous require](https://github.com/cjohansen/Sinon.JS/blob/v1.10.3/lib/sinon.js#L341-L354) should fail in compliant implementations, [as described in the amdjs wiki](https://github.com/amdjs/amdjs-api/wiki/require#requirestring-), but clearly it doesn't in all implementations.

Anyway. The first commit for this pull request adds a method to define the api using AMD's `define`, and not attempt to use synchronous `require` (which is not guaranteed to work).

Thoughts? Shall I continue down this path, and make sure that all the dependency resolution is bulletproof?