Simplify promise usage in registry

1. Use using promise.timeout rather than setTimeout to do the registry AMD load timeout.
2. Use `when.attempt` to execute `require` safely (so it always returns a promise).

I don't think I changed any of the semantics.  Unit tests pass, but def double check the timeout case to make sure I got it right :)  It'd be nice to pattern match on `when.TimeoutError` (or perhaps simply let it go through), but that was introduced in 3.2, so I don't think rest.js can rely on that yet.