Protect the require code

This has a potential issue in that it will serialize much more code than
MRI does because the first thread to hit this require method will hold
all other threads doing a require until the first require returns. MRI's
locking does not lock the full downstream code path.
- Gem.try_activate should return true if the spec is already active