15191 - Use UUIDs for request IDs rather than our hacky way

Previously we created our own request ids, these were not great multiple
requests in the same milli second on the same host could cause request
id clashes...not a problem in functionality with how the new message
flow works but it would be a auditing problem to have dupes.

We now use a more reliably random UUID implementation based on OpenSSL
128 bit random numbers and RFC compliant UUID formats

The SSL#uuid function returns standard format UUIDs for either a given
string or based on OpenSSL::BN.rand().  In the Message class we remove
the -s in the UUID thus keeping new and old request ids the same size
and format ensuring everyone who may have audit parsers wont break as a
result of this code
Revert "15191 - Use UUIDs for request IDs rather than our hacky way"

This reverts commit 140be022dcb16a48ac453dd893d19e6618286751.
15194 - Making request id accessible to clients and RPC clients

The M::Client class has access to the requestid but we never expose
that to the user except during fire and forget requests.

This change records the last request id in the main client stats as well
as the rpc stats
15195 - Batch requests should use the same id

Prior to this each set of batch requests created a new Message and thus
new request ids.

We have to create new Messages due to the security plugins and the TTL
of messages so we cant just simply reuse the one Message as it would
potentially expire before the end of the nodes is reached.

This commit allows the requestid to be set in a Message object and the
rpc client will now create a new id once and then set the same id for
future Message objects in the same batch, end result is the same request
id everywhere without breaking TTLs
15191 - Use UUIDs for request IDs rather than our hacky way

Previously we created our own request ids, these were not great multiple
requests in the same milli second on the same host could cause request
id clashes...not a problem in functionality with how the new message
flow works but it would be a auditing problem to have dupes.

We now use a more reliably random UUID implementation based on OpenSSL
128 bit random numbers and RFC compliant UUID formats

The SSL#uuid function returns standard format UUIDs for either a given
string or based on OpenSSL::BN.rand().  In the Message class we remove
the -s in the UUID thus keeping new and old request ids the same size
and format ensuring everyone who may have audit parsers wont break as a
result of this code
15226 - when sending a fire-and-forget request, do not still subscribe to a reply queue

Previously we always subscribed to the reply destinations when sending a
request.

However when a custom reply-to is set the client will not wait for
replies nor will any ever be sent to the default reply queue so that
subscribe was just not needed

Surpressing that now
maint: the config test left a bunch of temp files after running, we now
stub all the file operations so no more actual files are being created
15031 - Add summary methods to the DDL and RPC Results

Agent DDL actions can now contain a summarize block which will apply client
side functions to the response data.

These functions are implemented as aggregate plugins and it is only
necessary for them to be present client side.

Example usage :
  summarize do
    aggregate average(:foo)
  end

In the example 'average' is a client side function that will determine the
average of all of the :foo values in the response hash. Parameters
passed to the client side functions have to be outputs defined in the
ddl actions.
15266 - right justify keys in summary() aggregate function by default

The default summary format was just %s = %s which yielded ugly results
in the printrpcstats output.

We now determine the longest key in the value hash and provide a format
similar to %8s = %s for a result set where the longest key was 8
characters long
15248 - Add aggregation to the rpcutil plugin

Add summary blocks to the rpcutil result sets where appropriate
15267 - support surpressing aggregate summaries in printrpcstats

The aggregate summary stats is always available and always printed but
we really dont know what users want in their custom applications, it
seems that often they wont want summaries printed like in the case of
'fact' application.

So this changes the default that the summaries are not printed always
from the printrpcstats call but only when :summarize => true is passed
this should provide maximum backward compatability
15247 - Add aggregate functions found in agent repos in the client package

In the past aggregate functions were not packaged by the plugin
packager.

The plugin packager will now include aggregate functions in /aggregate
as part of the client package.
15270 - add a sum() aggregate function

Add a aggregate function that just produce the sum of a value
15271 - -S scanner not tokenizing classes correctly

Currently the scanner will combine multiple statements into one if the
leading statement is a class.

The scanner will now correctly identify a class token in a statement
15271 - -S scanner not tokenizing classes correctly

Update changelog
15268 - plugin packager should copy the DDL to both the client and agent packages

Currently DDL's are only added to the client package. We need DDL's in
both agent and client packages.

DDL's are now placed in the common package which will be created even if
the util directory isn't present during creation. Both agent and client
packages now always depend on common.
15268 - plugin packager should copy the DDL to both the client and agent packages

Update changelog
15273 - add an option to force display => failed behavior to rpc app

New vim snippets:

 * Remove the meta block from the agent
 * Add dataquery
 * Add discovery
 * Add default to outputs
 * Add boolean input type
 * Add numeric input type
 * Fix some spacing issues thats now possible with latest snipMate
15031 - Add summary methods to the DDL and RPC Results

Document the new aggregate functions
15341 - erorrs in aggregate functions should not be fatal

When encountering errors while loading or running aggregate functions we
now only log an error and then prevent further aggregate related
functionality, the end result is that all replies get processed as
expected but the aggregate summary in the stats will just be unset -
like it would when there were no aggregate summaries run at all

Additionally the aggregate_summary in the stats class now defaults
to an empty array to make users code a bit less awkward, they can always
expect aggregate_summary.each to do the right thing