Add install --no-lock option for not writing the dependency lock file

If a user does not care about locking dependencies (as they don't
want to force users to use specific versions of them), it makes
sense to not write a dependency lock file.  Previously there was
not an option to do this.
Refactor yank_command to use the centralized key overrides
Skip signing-in if a non-rubygems API key is already requested
use File.exist? instead of File.exists?
Fix a wrong type check in self.new
raise a ConflictError when there are conflicting specs loaded
only loop over spec dependencies to resolve conflicts

Before this commit, the `conflicts` method would loop over every
activated gem and the `conflicts` method would get slower as you
activate more gems.

This commit speeds up the `conflicts` method which is called on ever gem
activation by only looping over dependencies on the spec itself, then
looking up possible conflicts from the loaded_specs hash.

Here is the benchmark:

```ruby
def util_spec name, version = 2
  spec = Gem::Specification.new do |s|
    s.platform    = Gem::Platform::RUBY
    s.name        = name
    s.version     = version
    s.author      = 'A User'
    s.email       = 'example@example.com'
    s.homepage    = 'http://example.com'
    s.summary     = "this is a summary"
    s.description = "This is a test description"
  end

  spec.loaded_from = spec.spec_file

  Gem::Specification.add_spec spec

  return spec
end

require 'benchmark/ips'

(ENV['N'] || 100).to_i.times { |i| util_spec(i.to_s).activate }

p Gem.loaded_specs.size

Benchmark.ips do |x|
  spec = util_spec 'a'
  # Typical mode, runs the block as many times as it can
  x.report("conflicts") { spec.conflicts }
end
```

Before my change:

```
[aaron@higgins rubygems (master)]$ N=100 ruby -I lib test.rb
101
Calculating -------------------------------------
           conflicts      1957 i/100ms
-------------------------------------------------
           conflicts    20090.1 (±4.6%) i/s -     101764 in   5.077002s
[aaron@higgins rubygems (master)]$ N=1000 ruby -I lib test.rb
1001
Calculating -------------------------------------
           conflicts       214 i/100ms
-------------------------------------------------
           conflicts     2209.6 (±5.0%) i/s -      11128 in   5.050977s
```

After my change:

```
[aaron@higgins rubygems (master)]$ N=100 ruby -I lib test.rb
101
Calculating -------------------------------------
           conflicts     71357 i/100ms
-------------------------------------------------
           conflicts  2230414.4 (±7.2%) i/s -   11131692 in   5.022458s
[aaron@higgins rubygems (master)]$ N=1000 ruby -I lib test.rb
1001
Calculating -------------------------------------
           conflicts     69479 i/100ms
-------------------------------------------------
           conflicts  2171237.1 (±6.2%) i/s -   10838724 in   5.013410s
```

You can see that after this change the speed of `conflicts` stays about
the same regardless of the number of specs loaded.
only check conflicts for specs that can actually be activated

This commit separates the "a different version of this gem has already
been loaded" check from the "this gem has conflicts" check.

Merits:

* We only have to look up the spec once rather than twice:

  https://github.com/rubygems/rubygems/blob/f235c4a5f1e27369f9cf800b01092adc68216a53/lib/rubygems/specification.rb#L1264
  https://github.com/rubygems/rubygems/blob/f235c4a5f1e27369f9cf800b01092adc68216a53/lib/rubygems/specification.rb#L2053

* We only have to check existence of the spec once rather than twice:

  https://github.com/rubygems/rubygems/blob/f235c4a5f1e27369f9cf800b01092adc68216a53/lib/rubygems/specification.rb#L2055
  https://github.com/rubygems/rubygems/blob/f235c4a5f1e27369f9cf800b01092adc68216a53/lib/rubygems/specification.rb#L1264

* We don't need to check for conflicts on this gem because we aren't
  going to load it anyway.

Demerits:

* It seems that basically all methods in Gem::Specification are public,
so its impossible to tell what is safe to refactor.  This technically
changes the behavior of `raise_if_conflicts`, so if people are manually
instantiating specs and calling that method then it will not behave the
same.  If this method were private, we wouldn't have to worry so much.
Merge pull request #842 from tenderlove/perf

only loop over spec dependencies to resolve conflicts
Add #842 to History
Merge pull request #838 from kana/fix-typos

Fix a wrong type check in self.new
Merge pull request #829 from hsbt/remove-warnings

use File.exist? instead of File.exists?
support private s3:// urls for rubygems repos
implement s3 signing in rubygems itself

Depending on the aws-sdk gem for something as core as rubygems smelt
funny. Fortunately signing GET requests is pretty easy.
ruby 1.8.7 doesn't have Base64.strict_encode64
fix spelling of Jim Weirich.
Add ruby pull request #577 to History
don't remove always_install requests for local gems

If the gem was specified on the commandline, we should not remove it
from the `found` list even if it is a prerelease gem.

Fixes #828
Add #829 to History
Merge pull request #866 from tenderlove/localpre

don't remove always_install requests for local gems