Cheaper attribute_method_matchers

Conflicts:

	activemodel/lib/active_model/attribute_methods.rb
Optimization of ActiveModel's match_attribute_method?
Fewer object allocations

Conflicts:

	activemodel/lib/active_model/attribute_methods.rb
Issue #2075 Optimization of ActiveModel's match_attribute_method?

Conflicts:

	activemodel/lib/active_model/attribute_methods.rb
Made attribute_method_matchers_cache private + doc
Use an empty AttributeMethodMatcher by default.

This means that attribute methods which don't exist will get generated
when define_attribute_methods is called, so we don't have to use hacks
like `attribute_method_suffix ''`.
AM::AttributeMethods requires #class_attribute
Cheaper attribute_method_matchers

Conflicts:

	activemodel/lib/active_model/attribute_methods.rb
Optimization of ActiveModel's match_attribute_method?
Fewer object allocations

Conflicts:

	activemodel/lib/active_model/attribute_methods.rb
Issue #2075 Optimization of ActiveModel's match_attribute_method?

Conflicts:

	activemodel/lib/active_model/attribute_methods.rb
Made attribute_method_matchers_cache private + doc
Use an empty AttributeMethodMatcher by default.

This means that attribute methods which don't exist will get generated
when define_attribute_methods is called, so we don't have to use hacks
like `attribute_method_suffix ''`.
AM::AttributeMethods requires #class_attribute
Merge branch 'eac/backport_matcher_optimizations' into mail-upgrade