[PE-1788] Use safe_yaml for report parsing

This patch changes the report parsing code to use safe_yaml
to prevent security vulnerability. As safe_yaml deserializes
into basic data types only, further changes were needed
to transform the deserialized data into structure expected
by the original code.

This commit comprises the following commits that were backport from pe-puppet-dashboard/master to puppet-dashboard/2.8.4:

https://github.com/puppetlabs/pe-puppet-dashboard/commit/5b5f56335670eaecc4f1428a1a3a44af68c868b8
https://github.com/puppetlabs/pe-puppet-dashboard/commit/1bc12fd5f1d94efa38f934fa24971f8fa8d25eb7
https://github.com/puppetlabs/pe-puppet-dashboard/commit/38caf9119c4c122404555ce99ccae268a7e6a1af

We are now less strict about this specific case.

Ported back to puppet-dashboard master - Aaron Stone
Add safe_yaml gem
No longer require lib/puppet/report
Change RAILS_ROOT to Rails.root
Use psych now
Change spec from be_close to be_within
By moving to psych, we can run on Ruby 2.0
Bump locked gems
Require safe_yaml when ready
Use older nokogiri to retain Ruby 1.8.7 support
Temporary workaround for broken Rubygems on Travis
Pin shoulda-matchers < 2.0 to support Ruby 1.8.7
Bump locked gems
Stay on rspec 2.13 for now
For some reason Time.zone.parse has to be precalculated, else it returns nil to the stub.
Two deprecation warnings
Update matcher newer rspec
Update exception spec for rspec 2
There is no tasks/rails anymore
More exception updates for rspec 2