Router-related optimizations

An improved version of changes suggesed in PR #1352, and more specifically:

https://github.com/sourcejedi/CodeIgniter/commit/8f7d2dfe42bd8543981c0f295e391e433d82fd42
https://github.com/sourcejedi/CodeIgniter/commit/d2de251c092d9d822fc4898e3681b64e9c74dd2a

(thanks again @sourcejedi)
diff --git a/system/core/CodeIgniter.php b/system/core/CodeIgniter.php
index ee1e9b9..633be7f 100644
--- a/system/core/CodeIgniter.php
+++ b/system/core/CodeIgniter.php
@@ -256,17 +256,14 @@
  *  Security check
  * ------------------------------------------------------
  *
- *  None of the functions in the app controller or the
+ *  None of the methods in the app controller or the
  *  loader class can be called via the URI, nor can
- *  controller functions that begin with an underscore
+ *  controller functions that begin with an underscore.
  */
 	$class  = $RTR->fetch_class();
 	$method = $RTR->fetch_method();
 
-	if ( ! class_exists($class)
-		OR strpos($method, '_') === 0
-		OR in_array(strtolower($method), array_map('strtolower', get_class_methods('CI_Controller')))
-		)
+	if ( ! class_exists($class) OR $method[0] === '_' OR method_exists('CI_Controller', $method))
 	{
 		if ( ! empty($RTR->routes['404_override']))
 		{
@@ -325,9 +322,7 @@
 	}
 	else
 	{
-		// is_callable() returns TRUE on some versions of PHP 5 for private and protected
-		// methods, so we'll use this workaround for consistent behavior
-		if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($CI))))
+		if ( ! is_callable(array($CI, $method)))
 		{
 			// Check and see if we are using a 404 override and use it.
 			if ( ! empty($RTR->routes['404_override']))
diff --git a/system/core/Router.php b/system/core/Router.php
index 89fb74f..48c157f 100644
--- a/system/core/Router.php
+++ b/system/core/Router.php
@@ -54,13 +54,6 @@
 	public $routes =	array();
 
 	/**
-	 * List of error routes
-	 *
-	 * @var	array
-	 */
-	public $error_routes =	array();
-
-	/**
 	 * Current class name
 	 *
 	 * @var	string