Performance: implement #hash for Source classes

Correctly implement #hash for Source::Path, Source::Git and Source::SVN,
thus improve performance when loading a Gemfile with a lot of sources.
The #hash method is used when gathering sources in a Set or when calling
Array#uniq or Array#| (union).

By correctly implementing #hash we save unneeded calls to #eql? and
improve loading times of gems when many sources are listed in Gemfile.
Merge pull request #3113 from dubek/performance-source-hash

Performance: implement #hash for Source classes