15076 - The type and plugin name for a DDL object should be accessible

Since the DDL class is now used for all sorts of plugins in many
different scenarios it's become important to know exactly what it's
describing, this adds some readers and a small refactor to variable
names
15060 - for the plugin app DDL parsing failure should not say it cant find the DDL

Finish an unimplemented test
15082 - Agent DDLs should be required by the server

Prior to this DDLs for agents were completely optional, this commit
makes them a requirement and fails to load any RPC agent that does not
have a DDL.
15083 - Remove dead code from the 'discovery' agent

The discovery agent used to do what rpcutil does now prior to the RPC
framework being created.  This is long ago now and only the 'mco
controller' used these features and that command has now been removed.

This removes the dead code related to that feature
15084 - remove agent#help

Prior to the RPC framework and the DDL files agents had to define their
help as free form text in the actual agent and we'd fetch help over the
network.

This was a stop gap solution that's been completely replaced by DDL
assisted help so this commit removes all that dead code
15093 - revisit simplerpc/agents.md content

Clarify the idiomatic use of the result hash
15087 - pre-populate result hash with all outputs defined in the DDL

The DDL now has a optional default value in the output leg and
we pre-create the result hash with all the defaults or nils if
no default is supplied
15087 - pre-populate result hash with all outputs defined in the DDL

The first attempt at resolving this problem did not correctly check for
actions that are not defined in the DDL, technically this should not
happen but it can in some cases so best be careful
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