Don't use globals

- Use load_class() to get objects during bootstrap process.
- Change load_class() to accept a class constructor parameter
  instead of previously unused class name prefix.
- Change CI_Router::__construct() to accept  as a parameter.
Really don't use globals
Remove a needless check in CI_Output::append_output()
[ci skip] A tiny improvement in CI_Email
Fix #2901