Ensure that cache-control headers are merged

There are several aspects to this commit, that don't well fit into broken down
commits, so they are detailed here:

 * When a user uses response.headers['Cache-Control'] = some_value, then the
   documented convention in ConditionalGet is not adhered to, in this case,
   response.cache_control is ignored due to `return if
   self[CACHE_CONTROL].present?`
 * When a middleware sets cache-control headers that would clobber, they're
   converted to symbols directly, without underscores. This would lead to bugs.
 * Items that would live in :extras if set through expires_in, are placed
   directly in the @cache_control hash, and not respected in many cases
   (somewhat adhering to the aforementioned documentation).
 * Although quite useless, any directive named 'extras' would be ignored.

The general convention applied is that expires_* take precedence, but no longer
overwrite everything and expires_* are ALWAYS applied, even if the header is
set.

I am still unhappy about the contents of this commit, and the code in general.
Ideally it should be refactored to no longer use :extras. I'd likely recommend
expanding @cache_control into a class, and giving it the power to handle the
merge in a more efficient fashion. Such a commit would be a larger change that
could have additional semantic changes for other libraries unless they utilize
expires_in in very standard ways.
Remember the stored attributes in a config attribute.

This allows you to retrieve the list of attributes you've defined.
Usable for e.g. selects in the view, or interators based on the
attributes you wish to store in the serialized column.
Refactor and use class_attribute
Merge pull request #5412 from tilsammans/stored_attributes

Added `stored_attributes` hash which contains the attributes stored using
ActiveRecord::Store. This allows you to retrieve the list of attributes
you've defined.

    class User < ActiveRecord::Base
      store :settings, accessors: [:color, :homepage]
    end

    User.stored_attributes[:settings] # [:color, :homepage]
Validates_numericality_of is skipped when changing 0 to to non-empty string

This happens when A has_many many B and A accepts_nested_attributes B that has a numeric colum
with initial 0 value. So a.update_attributes({:b_attributes => { :id => b.id, :numeric => 'foo' }})
passes the validation test but, the value of :numeric doesn't change.
his commit forces that the update fails with the above conditions.

Fixes #6393
Fixes #2331
Refactor the conditionals
Merge branch 'acapilleri-update_nested_attributes'

Closes #6675
Added test for case when view doesn't have logger method when using ActionController::Metal controller.
Merge pull request #6776 from raggi/cache_control

Ensure that cache-control headers are merged
Merge pull request #6777 from route/logger_in_metal_tests

Added test for case when view doesn't have logger method when using 
ActionController::Metal controller.
Refactor db:charset task

In a similar vein to Pat's work on create, drop etc, the db:charset
task is now a one liner in databases.rake
Merge pull request #6779 from simonjefford/db-rake-charset

Refactor db:charset task
Refactor db:structure:dump task.
Rename MySQLTestPurge to MySQLPurgeTest for consistency.
Merge pull request #6783 from kennyj/rename_testname

Rename MySQLTestPurge to MySQLPurgeTest for consistency.
Rename testcase name. It's wrong in the context.
Merge pull request #6785 from kennyj/rename_testcase_name

Rename testcase name. It's wrong in the context.
make the fanout notifier local to the current thread
reduce thread locals
remove global cache