We are striving to reduce the complexity of ChangeJson. One dimension of
this is to make all members final to ensure a consistent object state.
PluginDefinedAttributesFactory is used to create PluginDefinedAttributes
using a query processor as a parameter. Therfore it can't be easily
removed as ChangeJson does not know about the query parameter that was
used to get the results (if any).
As a stop-gap, pass in a PluginDefinedAttributesFactory as an optional
paramater.
Change-Id: Ib1c6d58331dc36c9cbd8dcd1ab6e9f639b7874a8