Use Rails to Render Default Index Page

This is an alternative implementation to #7771 thanks to the advice of @spastorino

Rails is a dynamic framework that serves a static index.html by default. One of my first questions ever on IRC was solved by simply deleting my public/index.html file. This file is a source of confusion when starting as it over-rides any set "root" in the routes yet it itself is not listed in the routes. By making the page dynamic by default we can eliminate this confusion.

This PR moves the static index page to an internal controller/route/view similar to `rails/info`. When someone starts a rails server, if no root is defined, this route will take over and the "dynamic" index page from rails/welcome_controller will be rendered. These routes are only added in development. If a developer defines a root in their routes, it automatically takes precedence over this route and will be rendered, with no deleting of files required. 

In addition to removing this source of confusion for new devs, we can now use Rails view helpers to build and render this page. While not the primary intent, the added value of "dogfooding" should not be under-estimated.

The prior PR #7771 had push-back since it introduced developer facing files. This PR solves all of the same problems, but does not have any new developer facing files (it actually removes one). 

cc/ @wsouto, @dickeyxxx, @tyre, @ryanb, @josevalim, @maxim, @subdigital, @steveklabnik

ATP Railties and Actionpack.
Update railties/lib/rails/info_controller.rb

# :nodoc: the rails/info_controller
Make sure that no extra spaces are created with a non-polymorphic
attributes
Merge pull request #8468 from schneems/schneems/rack-index-page

Use Rails to Render Default Index Page
Match the controller and path names defensively.

Use '\A' instead of '^', and make the alteration shorter.
Merge pull request #8482 from BanzaiMan/defensive_matching_on_default_index_page

Match the controller and path names defensively.
Add String#in_time_zone method

This commit adds a convenience method for converting a string to an
ActiveSupport::TimeWithZone instance using the configured Time.zone or
another passed as an argument.
Explain how to supersede the new dynamic welcome page

The old, static welcome page instructed developers to delete the
public/index.html file and set a root route.  The new, dynamic welcome
page should tell developers (a) why they're seeing it when it doesn't
correspond to anything in the viewable app source and (b) that it can
be superseded with a root route.
Add missing at_end_of_* aliases
Deprecate Date#to_time_in_current_zone

The to_time_in_current_zone method doesn't match the naming of the methods
for converting to ActiveSupport::TimeWithZone on Time and DateTime. Since
DateTime inherits from Date that has led to confusion with some users
using the to_time_in_current_zone method with DateTime instances and having
the time part dropped and the UTC offset lost.

This commit fixes this by deprecating the old method and adding a new
in_time_zone method which matches the naming for DateTime and Time. This
should prevent accidently dropping times and UTC offsets when converting
DateTime instances to ActiveSupport::TimeWithZone.
Merge pull request #8484 from gclag/dynamic-index-refinements

Explain how to supersede the new dynamic welcome page
Update guides/source/routing.md

It's no longer necessary to delete public/index.html for the root route to take effect.
Remove changelog entry from #8441 [ci skip]

This issue only happens on master due to internal AR refactorings, so
there is no need for a changelog entry.

The test was backported to 3-2-stable to ensure there won't be any regressions.
Clean up 'active_support/time' requires

Rely on the hub files for Time, Date and DateTime classes and
add the requires for String#to_time and String#in_time_zone.
Only call `in_time_zone` on Time or DateTime instances

Both String and Date now respond to in_time_zone so we need to
check if the value is a Time or a DateTime.
Beef up tests for String#in_time_zone and Date#in_time_zone
Deprecate obsolete Time to DateTime fallback methods

The Time.time_with_datetime_fallback, Time.utc_time and Time.local_time
methods were added to handle the limitations of Ruby's native Time
implementation. Those limitations no longer apply so we are deprecating
them in 4.0 and they will be removed in 4.1.
Backport thread-local variables from Ruby 2.0
Fix rewinding in ActionDispatch::Request#raw_post

If env['RAW_POST_DATA'] is nil, #raw_post will attempt to set it to
the result of #body (which will return env['rack.input'] if
env['RAW_POST_DATA'] is nil). #raw_post will then attempt to rewind
the result of another call to #body. Since env['RAW_POST_DATA'] has
already been set, the result of #body is not env['rack.input'] anymore.
This causes env['rack.input'] to never be rewound.
Improve test name related to cache timestamp format [ci skip]

Conflicts:
	activerecord/test/cases/base_test.rb