14254 - Create pluggable data sources usable in agents and discovery

This adds a new plugin type called Data with associated tooling to load
them, create DDLs for them and allow the plugin packager to package
them.

These plugins provide a standard means to query information about the
running system like the existance of a user etc, these will be usable in
agents and eventually in the discovery system and clients.  Users can
write their own data plugins thus extending discovery.

An example File Stat data source is included, to use the File Stat data
source in a agent you simply do:

    reply[:result] = Data.fstat("/etc/passwd").size

The data source can only return String, Numeric and Boolean data, the
the result object in the plugin enforce this and the result itself
behaves like a hash so multiple items can be returned like for a plugin
you might return arch, versions etc.  Restricted to these types to be
compatible with JSON which will become the transport medium for
mcollective in future.

These data sources will be exposed to discovery from the client where a
user might write a compound discovery statement like:

    -S "fstat('/etc/passwd').mtime_age < 3600"

This will let users discover machines where the password file was
changed less than a hour ago.

This will allow us to extend discovery with any information like using
Augeas or really any other information availble on the nodes.  I
anticipate that we'll ship ones to query sysctl, fstat and a few other
common needs.

The data sources have activate_when block support just like agents for a
confine system and the DDLs define input, output, ttl and other standard
metadata.  We validate the query prior to calling the lookup function
based on the DDL for safety.

The DDL system can now handle DDL files for different types of plugin
and supports different ERB templates to produce help for each type of
plugin.  There is now a conventional location for these erb files - the
directory the configuration file is in by default - and this is
configurable in the config files.
14254 - Create pluggable data sources usable in agents and discovery

Rewrite scanner and parser to handle functions, arguments and output
properties.

Update the security base class to use the new methods to validate
filters and adjust option parser to use the new helpers for creating the
call stack
14254 - Create pluggable data sources usable in agents and discovery

Add client side validation of data functions and expected return values
14254 - Create pluggable data sources usable in agents and discovery

- Fixed String comparison
- Removed ability to do < and > comparisons with Strings and Booleans
- Changed function hash keys to strings from symbols
- Removed exits from parser
- Fixed Scanner regex that identifies correct function statements
- Updated Scanner and Parser spec tests
14254 - Create pluggable data sources usable in agents and discovery

While checking if a data plugin should be activated we now catch
exceptions and disable the plugin if anything goes wrong in the
activate? block

The rpcutil agent and inventory application will now report and show
installed data plugins for a node

Add documentation for the new plugin type and fix some other related
documentation
14254 - Create pluggable data sources usable in agents and discovery

- Moved matcher methods from Util to Matcher
- Added double quote parsing to matcher
- Added != operator to language (works on regexes)