This is different from the current behavior, which is in no way based on controller's `abstract`ness. Say I have an app like this:

```ruby
class ApplicationController < ActionController::Base
  self.layout = 'foobar'
end

class WidgetController < ApplicationController
  abstract!
end

class FooWidgetController < WidgetController; end
```
With the new implementation `FooWidgetController` will lose `ApplicationController`'s layout configuration, this is a subtle change of behavior, that I am pretty sure is going to be painful to debug.

Not sure how to best fix this, maybe we should add a `_layout_base` tag to controllers and break recursion if it is `true`.

```ruby
included do
  @_layout_base = true
  singleton_class.send(:attr_reader,  :_layout_base)
  singleton_class.send(:alias_method, :_layout_base?, :_layout_base)
end

# and then in DefaultLayout#for_class
lookup_context.find_all(implied_layout_name, prefixes).first || (!controller_class._layout_base? && for_class(controller_class.superclass))
```