Respect --document for `gem update`

The update command still uses Gem::DependencyInstaller for installing
gems (instead of Gem::RequestSet).  The DependencyInstaller adapter to
RequestSet did not pass along the document options so update fell back
to the default options.

This caused --no-document to be ignored.  Now these options are passed
down to RequestSet.

Fixes #946

Pair: @Elffers
Clarify coding style
Add testing information to CONTRIBUTING
Make gem -g Gemfile respect --conservative (Fixes #929)

This is the least intrusive way I could think to support the
combination of -g and --conservative.  This took a while to
figure out, but it should correctly handle dependencies and
make sure that currently installed gems are used instead of
installing new gems, as long as the currently installed gems
meet the version requirements.

Implmentation wise, this adds a hash attribute to the Resolver
for gems that should be skipped instead of new installations
made if the versions match.  The RequestSet sets this variable
with the specifications of all of the currently installed gems
if --conservative is used.

When finding possible dependencies in the resolver, we still query
the rubygems.org API, but then we restrict the returned results
to only gems that match the currently installed gems, if any
do.  The reason for this choice of implementation is parts of
rubygems expect Gem::Resolver::APISpecification instances,
and I couldn't think of a good way to create them otherwise.
cut monitor entry / exits in half on "happy path" requires

Before this change RUBYGEMS_ACTIVATION_MONITOR would enter and exit
twice for every call to require.  This commit pushes the "exit" call
outside of the `ensure` block to the `rescue` and unlocks in the
appropriate place.  Eliminating the effectively "global" unlock in then
`ensure` block allows us to lock and unlock once during happy path
requires, and only lock / unlock twice when `gem_original_require` fails
and we need to attempt to activate the gem.

Here is a test to demonstrate the problem:

```
require 'rubygems'
require 'tempfile'

moncalls = []
trace = TracePoint.new(:c_call, :call) do |tp|
  if tp.method_id == :mon_enter
    moncalls << [tp.defined_class, tp.method_id, tp.path]
  end
end

f = Tempfile.open(['foo', '.rb'])
f.write "true"
f.close

$: << File.dirname(f.path)
file = File.basename f.path, '.rb'

trace.enable
require file
trace.disable

p moncalls.length
```

Before this change `moncalls.length` will return 2, after this commit,
it returns 1.
add a test to demonstrate concurrent require support
make sure to exit the monitor before raising
Fixed spelling.
Merge pull request #952 from pmodin/spell_fix

Fixed spelling of `gem update --help` [ci skip]
Make -s a short version of --source

This restores the functionality of -s in versions prior to 2.3.0.
Add test case for -s (short for --source)
Improve messaging for conflict errors

Previously conflict errors looked something like this:

    Activated a-2 via:
      a-2 (= 2)
    instead of (= 1) via:
      user request (gem command or Gemfile)

This is very difficult to read and I do not know what is going on here.

Now the conflict errors look like:

    Activated a-2
    which does not match conflicting dependency (= 1)

    Conflicting dependency chains:
      a (= 2), 2 activated

    versus:
      a (= 1)

Which I find much easier to read as I can tell what is going on now.

Part of #944
Add #952 to History
include test for v0.X.X versions

For semantic versioning I had expected only exact matches to satisfy, because
breaking change can occur at even the patch level.  RubyGems does not
have any special `satisfied_by?` logic for v0.X.X gems, this patch
documents that.
change condition of YAML engine for Psych
rescue load error for Gem loaded.

backport from https://github.com/ruby/ruby/commit/cc02a4ab7b71215de89c6bcfddc2fb2ef6f587be
Enable use of gem open with command line editors
Merge pull request #959 from hsbt/change-condition-of-psych

Change condition of YAML engine for Psych
Merge pull request #960 from hsbt/rescue-gem-loaderror

Rescue load error for Gem loaded.
backport r46144 from ruby/ruby trunk.