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

Move the RPC::Helpers#color and #colorize methods into Util as we're
seeing more and more use for color in other non RPC specific areas of
the code.

Adjust any calls to the RPC::Helpers versions and add some simple tests
14254 - Create pluggable data sources usable in agents and discovery

First rough stab at getting the discovery tooling in
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

Move the helpers that turn strings into numbers or booleans onto the DDL
class so they can easier be reused between various parts of the system
like the RPC application and DDL validation for data plugins
14254 - Create pluggable data sources usable in agents and discovery

Transforms numbers and booleans entered on the CLI into actual numbers
and boolean types prior to doing DDL validation
14254 - Create pluggable data sources usable in agents and discovery

Cosmetic changes
14254 - Create pluggable data sources usable in agents and discovery

- Fixed String comparison
- Changed function hash keys to strings from symbols
- Removed exits from parser
14254 - Create pluggable data sources usable in agents and discovery

Removed ability to perform > and < comparison on Strings and Booleans
14254 - Create pluggable data sources usable in agents and discovery

fixit
14254 - Create pluggable data sources usable in agents and discovery

- Fixed scanner regex that identifies functions correctly
- Updated Scanner and Parser spec tests