Add UniqueId.maxPossibleId() to determine the max ID

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add UniqueId.getUsedUIDs() to fetch all of the max UIDs in one call
asynchronously as per isavin's work on #153

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Modify TSDB.collectStats() to return the used and available UIDs as per isavin's
work on #153

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Fix GUI version tab display that wasn't showing information due to Jackson
outputting the timestamp as a string.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add shutdown calls for plugins when gracefully closing the TSD

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add RPC Plugin interface to let users implement their own RPC protocols such as
Protobuf, Thrift, Avro, Memcache, whatever.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Modify TSDB.initializePlugins to load RPC plugins on startup only when the
calling tool code specifies that RPCs should be initialized, e.g. the TSDMain
tool. Other tools may want the search or RT plugins but not the RPCs, e.g. the
UidManager tool.
Users can specify multiple RPC plugins. They are initialized and stored in a
list. Then on shutdown, the list is iterated and each plugin gracefully
shutdown.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add DataPoints.getTSUIDs() to fetch a list of TSUIDs for each time series
in a span group. Can be displayed in the /api/query output.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add "show_tsuids" parameter to /api/query to output the TSUIDs with the data
points when the user requests it.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Merge remote branch 'remotes/official/next' into next