(PUP-2610) Maintain context during application exit

Because of the way rack servers get configured by puppet, the
application system needs to maintain any context information that is
setup while starting even after the application has exited. This is
because the rack app is created by calling the "master" application and
using the return value (which threads all the way back through the
application and command line layers) as the rack app. When the contexts
were removed on the way out of the application they also removed the
setup for how environments were loaded.

This also required that there be a way of undoing a series of context
pushes without knowing how many had been done. For this there is now a
mark and rollback capability in the Puppet::Context system. This is used
in the tests to always return to the context that was present at the
start of every test.
Merge pull request #2664 from zaphod42/issue/stable/pup-2610-rack-fails-to-track-environments

(PUP-2610) Maintain context during application exit
Merge branch 'stable'

Conflicts:
	lib/puppet/application.rb
(maint) Remove trailing commas from three env review calls

Trailing commas on hashes that are the terminal arguments in function
calls were failing when the coordinator running acceptance happened to
be using Ruby 1.8. Removed the commas.
(maint) Replace runtime logging line lost in merge of PUP-2610

This line was added for PUP-1736 and accidentally lost in the merge
churn from PUP-2610 merging up from stable. This just puts it back.