Time Update Throttling

Add new methods to XmlDocumentEditor for use by the time update
throttling code:

isEmptyDocument() - check if a document does not contain a root
element, or the root element contains no nodes

update setPI() - allow including PI data (remove addPI() as
those methods were equivalent to setPI() and not used)

add filterOutDocumentXPath() and filterOutElementXPath() -
these methods allow removing matched elements as well as
all parent elements up to the document root (or provided
element) that have no other children and no text
Time Update Throttling

Add new FilterXmlScoreBoardListener to allow filtering of
incoming XML doc events based on a specified XPath

Update QueueXmlScoreBoardListener to extend new filter listener
class
Time Update Throttling

Update Clock with methods to determine if time is
at start or end of range.  Before, code had to check
clock count direction as well as comparing time against
either time min or max.  New method allows easy checking
of either provided time or Clock current time.
Time Update Throttling

Update ScoreBoardXmlListener to attach new Processing Instruction
"TimeUpdate" with value either "sec", if time changes second
value or if time is at clock start or end, or "ms" if time is
only a change in milliseconds

Update XmlScoreBoardServlet to optionally provide XPath filter to
associated listener that filters out any time updates with
"TimeUpdate" Processing Instructions with value "ms".  Default
is to filter ms updates out; this can be changed at the URL
/XmlScoreBoard/config?timeUpdate=ms when also including the
current registration id as a param.