Simplify Finding Default Layout

# Summary

This PR simlifies the logic for finding default layouts in controllers when rendering.

Note: The code here is still changing, this PR was opened to have a discussion forum and to check general acceptance of this refactoring. All tests pass on my system :grimacing: 

# Implementation

While the former implementation was really hard to read and understand, the new `DefaultLayout` class cleanly provides encapsulation, and, more important, removes dozens of line of string evals, `super` calls where it was hard to know what `super` is and removes the need to hook into `inherited`.

Instead, it implements a recursion that travels up the controller inheritance chain to figure out the default layout.

Bottom line: No dynamic method defintions, no string eval, no `inherited`, and 47% less code.
> but, hey, this is Rails

Indeed... which means no matter how weird it seems, *someone* has done a thing that depends on it. And will upgrade without reading the CHANGELOG. :grinning:

I don't know that it's actually come up before, but I guess something like this would work:

``` ruby
def method_missing(meth, *args)
  if meth == :layout
    ActiveSupport::Deprecation.warn(....)
    layout *args
  else
    super
  end
end
```

In this case, however, yeah, I think it's best to just leave it public.