Import existing patches for LOG4J2-745

  - Thanks to Scott Harrington for 99% of the code.
Merge branch 'LOG4J2-745' into feature/plugin-registry

Conflicts:
	log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginManager.java
Use double checked locking.
Use ClassLoader instead of ResourceLoader.
Remove unused classes.
Remove unused methods.
Narrow scope of warning suppression.
Move type converters to own package.
Revert "Remove unused methods."

This reverts commit 31d65a449a202dd0ba72dbce0b4f7bcb437ba94d.
Reformat (no changes).
Add Throwables.rethrow() method.
Add constructor-related utility methods.
Use proper double checked locking as detailed in Item 71 in Effective Java (2d. ed.)
Use proper double checked locking as detailed in Item 71 in Effective Java (2d. ed.)
Add @Plugin to all concrete type converters.
Suppress serialization warnings where applicable.
Add TypeUtil adapted from Spring Core.
Move EnumConverter to top level class.
Add TypeConverterRegistry and test.

  - Implements LOG4J2-827.
Update TypeConverters to use TypeConverterRegistry.

  - Manual registration of converters removed.
  - Remove unused methods.
  - Remove EnumConverter that was already extracted.