Backport 16fc8e8b to 2.0 branch.

Restore concurrent requires

When #8374 was fixed all requires were serialized, so one thread would
be blocked waiting for gem resolution (if any) and require in another
thread.  This is undesirable for JRuby, in particular.

The monitor protecting the RubyGems internals only needs to cover gem
activation and modifying $LOAD_PATH, not requiring files.

Now the monitor is released before calling the original Kernel#require
which allows other threads to require files without waiting for
RubyGems.

Fixes #640

See also #637
Merge pull request #833 from nagachika/backport_fix_for_concurrent_requires

Backport a fix for concurrent requires