Class for execute Hooks can be stored for reuse
Update the CI_Hooks class
Merge pull request #2800 from marcossffilho/develop

Store Hooks objects
[ci skip] Add a changelog entry for PR #2800
Some small improvements to the Xmlrpc class
A tiny improvement in CI_Upload::do_xss_clean()
Optimize get_instance() calls/assignments
Fix #148

CI_Input::_clean_input_data() assumed that all input data is URL-encoded while sanitizing it.
However, PHP already performs URL-decoding on it, so this is either redudant or overly
intrusive as it resulted in many, many reports of data containing '%' followed by 1 numeric
characters being essentially destroyed.

Supersedes PR #1229
[ci skip] Fix a wrong issue reference from the previous commit
Fix #346

When ['global_xss_filtering'] was turned on, the , ,  &
superglobals were automatically overwritten. This resulted in one of the following problems:

 - xss_clean() being called twice
 - Inability to retrieve the original (not filtered) value

XSS filtering is now only applied on demand by the Input class, and the default value for
the  parameter in CI_Input methods is changed to NULL. Unless a boolean value is
passed to them, whether XSS filtering is applied depends on the ['global_xss_filtering']
value.
Make newline standardization configurable

Added ['standardize_newlines']

Also altered the Session cookie driver, which experienced issues with this
feature due to it's HMAC verification failing after the Input class alters
newlines in non-encrypted session cookies.

Supersedes PR #2470
Deprecate the 'mysql', 'sqlite', 'mssql' and 'pdo/dblib' drivers

The 'mysql' PHP extension is notorious for it's problems and is deprecated as of PHP 5.5.

The other ones are dropped from PHP 5.3.
Update the Calendar Class
Added custom error messages functionality for individual fields.
Fix 2 errors caused by recent commits
Code Corrections for the Calendar Pull Request
Join two if statement into one
Unnecessary rtrim and update docs for Calendar class
Remove preg_quote() call from CI_User_agent::_set_browser() and add another pattern for Opera

Input comes from a configuration file that is barely touched by anyone
and the default values only contain letters, so it is safe to not
quote them.

This enables us to add a more advanced pattern in config/user_agents.php
for Opera 10+, which ... quote:

  Opera/9.80 is hard coded at the beginning of the user agent string because of broken browser sniffing scripts which detect 'Opera/10' and above as Opera 1.

(reference: http://my.opera.com/community/openweb/idopera/)

Instead, latests versions of Opera append ' Version/<version number>'
to the end of the user agent string.

Fixes issue #555 (incorrect browser detection for Opera)
Add CI_User_agent::parse() to allow parsing a custom user-agent string

Based on PR #970