Add visitors package for PluginVisitors.

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1597505 13f79535-47bb-0310-9956-ffa450edef68
Add PluginVisitor interface.

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1597506 13f79535-47bb-0310-9956-ffa450edef68
Add base class for PluginVisitor implementations.

  - Provides a couple convenience methods for future implementing 
  classes.

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1597507 13f79535-47bb-0310-9956-ffa450edef68
Add PluginAttribute visitor implementation.

  - Logic is refactored from PluginBuilder.

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1597508 13f79535-47bb-0310-9956-ffa450edef68
Add PluginVisitors registry class.

  - Registers the PluginAttribute visitor by default.
  - Will be adding other visitor implementations over time.

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1597509 13f79535-47bb-0310-9956-ffa450edef68
Update how default values are handled along with @PluginAttribute.

  - By using a visitor pattern combined with a registry of 
  annotations to visitor classes (which wouldn't be necessary if 
  annotations supported methods), this can help simplify the huge 
  if/else-if tree in PluginBuilder. This will also make it easier to 
  support both factory methods and builder classes concurrently 
  during the transition.
  - @PluginDefault has been deleted and migrated to be a part of 
  @PluginAttribute instead.
  - PluginBuilder has been simplified to use the PluginVisitor code.
  - Note that one key difference is that default values can be 
  interpolated by the StrSubstitutor as well. This might come in handy.

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1597510 13f79535-47bb-0310-9956-ffa450edef68