Test UpdateCommand#fetch_remote_gems

This method is untested, but will need to change for #688
Allow a SourceFetchProblem to be raised

Ruby uses #exception to convert an object into an Exception subclass
suitable for raising.  This aliases #error to #exception so we can type
less when re-raising after such a problem.
Re-raise exceptions when looking for latest gems

In the update command RubyGems was ignoring exceptions raised when
determining the latest version.

This meant that `gem update --system` from a rubygems with invalid
certificates would incorrectly report "nothing to update".

Now, if an error is raised and captured, the update command will
re-raise the exception which gives useful feedback to the user.

Fixes #688
Fix unused variable warnings
Fix circular require warning in tests
Document Gem::RequestSet initialization
Require Gem::Command* for tests

This is needed in various places after removing the unneeded requires
from lib/rubygems/ext*.
Install gems when $HOME does not exist

During gem installation RubyGems caches files in the home directory.  If
the home directory did not exist or was unwritable RubyGems would raise
an exception even though it had the ability to avoid updating the cache.

Now, when checking to see if the cache should be updated, RubyGems
no longer raises an exception.

Fixes #689
Fix updating gems which have multiple platforms

After @0000d57 for #688 was committed, when updating a gem with multiple
platforms a TypeError would be raised.  This occurred because a
PlatformMismatch error was returned which we don't care about in the
update command.

The PlatformMismatch is not an Exception so it could not be raised.  Now
only errors that respond to #exception are raised, which is a poor way
of ignoring the PlatformMismatch errors inside fetch_remote_gems.

Fixes #693
Fix conflict resolution for toplevel dependencies

When a conflict for a user-specified dependency was encountered in
DependencyResolver#handle_conflict the resolver would crash as no
requester was available.

Now we use the original dependency for the conflict as that is the only
one available.

I think @evan should review this change.
Remove undefined ivar warning when loading a spec from YAML
Restore old behavior of ignore the platform of specified files. Fixes #695
Improve the error message when no gem is found due to platform mismatches
Improve error reporting of failed explict vs implicit dependencies
Use user-provided directories in `gem server`

Previously Gem::Server would reset the gem list for certain requests.
This was designed to always provide the latest installed gems for
installation.

When the --dir option was used, resetting the gem list would also revert
to the standard gem directories.  This meant the user-provided
directories would always be ignored.

Now the reset includes the gem directories the user provided to
eliminate this problem.

Fixes #696
Refactor resetting gems to a method

This makes it more clear what we're doing with Specification::dirs=
Add bugfix entry to History.txt for @2594288
Mention #695 bug fix in History.txt