Add unified caller class utility class.

  - Based on ReflectiveCallerClassUtility.
  - Adds getCallerClass(String) which is primarily used by ClassLoaderContextSelector.
  - Adds getCurrentStackTrace() which is ported from ThrowableProxy.
  - Adds a rather complete implementation of getCallerClass(int) based on Throwable.
  - Unit tests.
  - Updates benchmark tests accordingly.
  - Will also help us maintain future compatibility with JDK 9 and beyond (hooray for tests!)
Use ReflectionUtil.getCurrentStackTrace()
Use ReflectionUtil.getCallerClass(String)
Remove old caller class utility.
Prefer classes over names in LogManager.

  - Allows for specifying the ClassLoader in getContext().
  - Updated to use ReflectionUtil instead of getClassName(int).
  - Use Class instead of String methods where possible.
  - Refactor commonly repeated calls to LogManager.class.getName() into static field.
Merge remote-tracking branch 'origin/LOG4J2-809'

Conflicts:
	log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java
Use LoaderUtil.loadClass().
Simplify LoggerAdapter interface.

  - Moved one method down to abstract class.
  - Use Closeable interface instead of stop method.
Add LOG4J2-809 changelog entry.