Add PluginElement visitor implementation.

  - This is by far the hardest one to both get right and clean up. 
  I've only been able to clean up a little from the original code 
  this is based on, so please feel free to offer improvements if you 
  can figure this out!
  - Moved the list of used nodes to directly modify the
  Node.getChildren() list (outside iteration of course!) instead of 
  relying on a field.
  - I noticed a bit of inconsistency in how a child node's object is 
  checked for null: when there's an array of elements, null objects 
  are warned about in the log. When there's a single element, a null 
  object is happily returned without any logging. Does this make sense?

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1597517 13f79535-47bb-0310-9956-ffa450edef68
Update PluginBuilder to use PluginElementVisitor.

  - PluginBuilder is finally reaching a reasonable size!

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