search consumers by on facts

This behavior mirrors that of pool lookup by attributes.
supplied keys are ANDed together, if there are multiple values
for a key, they are considered ORs.  The key is case sensitive,
however values are not.

Fact lookup supports the wildcard *.  It may be used any number
of times in the key or value.
Support colons in the value of KeyValueParameters

Previously we used inputstr.split(":"), now we supply a maximum
of 2 so that values with colons (mac addresses for example) will
be searchable without causing exceptions.
Add index to cp_consumer_facts on cp_consumer_id

This should make it faster to build a consumer object from the
database.