PUP-1724 Don't modify the paramaters to deep_merge

Instead of modifying the first paramater of deep_merge due to the
use of the merge! function, instead use merge to return a copy of
the merged object. This allows one to continue to use the original
first parameter after the call to deep_merge.
hash example has misplaced comas
Numerous changes to update testing gems.

This work updates a number of Gems to the latest versions (rspec,
rspec-puppet), and updates and tweaks a bunch of tests to work
with the updated gems.
Merge pull request #230 from apenney/fix-testing

[WIP] Spec overhaul.
Readd location_for

location_for is used in Jenkins to transform a passed in git
repo into something usable by bundler.
Merge pull request #232 from apenney/add-back-location

Readd location_for
Make sure location_for is used when installing Puppet.
Merge pull request #233 from apenney/add-back-location

Make sure location_for is used when installing Puppet.
Merge pull request #221 from puphpet/hash-fix

hash example has misplaced comas
Merge pull request #220 from mediatemple/fix/master/deep_merge_fix

PUP-1724 Don't modify the paramaters to deep_merge