Add option to send email attachment from string (not only from file).

I would be very pleased if this option would be available in some
future version. Thank you.
Update HelperCollection & Helpers for events.

A number of things have changed here:

* Helpers now directly bound to the EventManager.
* View now directly triggers events.
* HelperCollection is a basic factory/registry now.
* Helper uses reflection to determine the implementedEvents. In
  a subsequent commit the base methods will be removed, making fewer
  events bound per helper.

Eventually, this will help increase performance around helpers and help
streamline the events overall.
Remove default implementations for helper callbacks.

Removing the empty methods removes *many* event listeners as most
helpers don't implment these callbacks. Now that callbacks are only
registered/listened to as needed this should greatly reduce the number
of event listeners used in the view layer.
Clean up Event system.

* Remove passParams. This option is now enabled always implicitly. You
  cannot turn it off.
* Update Event class to make data protected and expose data() method.
* Update tests.

This change simplifies the event system a bit and removes additional
mostly useless configuration.
Remove fragile section of code.

This code creates annoying dependencies when testing CacheHelper.
Update failing tests caused by changes in view events.

Update failing view & helper tests. Account for the various API changes
in the Event system and simplify tests by changing which objects are
mocked.
Partially revert changes to Event.

The changes around the data property will have to wait until Components
are also migrated to the new event style.
Remove useless variable.
Tidy up doc blocks and use proper mocks.
Fix failing tests.

I'm dumb and left off required arguments.
Optimize listener callbacks.

Use direct function calls as they can be up to 30% faster than
call_user_func_array.
remove @access and unnecessary $name
Fix deprecated value in argument and disable caching

This aligns better with changes required in the 3.x branch.
Related: 4bb0a122
Fix merge: value in first argument and disable caching

Ref: 542d594b
Update index.php to serve static files with query strings.

Trim off the query string before attempting to locate the file on the
filesystem. Thanks to Marko Marković for the initial patch.

Fixes #3910
Update ServerShell to use provided documentRoot.

Fix ServerShell from using the wrong path to the routing script when
a custom document root is used. Thanks to Marko Marković for the patch.

Fixes #3909
Don't use inline assignment.

CakePHP generally avoids inline assignment as it can be confusing and do
the wrong thing.
Fix failing test in Router

Update plainstring tests to account for various types of relative links
that don't resolve to routes. Those include urls with leading //, ://,
?, and #.
Update tests for changed 3.0 directory names.

In 3.0 `app` was renamed to `App`. This needed to be updated in the
tests as path segments are case sensitive.
Updated Inflector's 'pluralize and singularize to correctly handle addisional words.
Updated InflectorTest to test new words.