FIX: $Layout should not be executed if inside cached block

This is a fix and test case for Jonathan Menz' assertion in the silverstripe-dev discussion below.  It shows that $Layout is processed (which means all method calls, etc, are processed - causing performance problems) even if it does not need to be since it is only referenced within a <% cached %> block.

The problem with the code was in SSViewer->process where the Layout and Content templates were executed and made into an underlay before $this->includeGeneratedTemplate is called.  They were executed even though they may not be needed.  This PR changes that behavior to turn them into a closure to allow late-binding of variables within the underlay.  It also adds the same functionality for the overlay for the sake of consistency even though that is not currently used.  This was needed because the overlay and underlay before were treated only as arrays of values rather than objects that could have methods like the actual data object that SSViewer_DataPresenter is wrapping.

See https://groups.google.com/d/msg/silverstripe-dev/itYU50HoH50/aR6grcPIBSYJ