Specify a DSL for metadata searches

Imbo needs to be able to perform metadata searches against the images resource, and for this we need to specify a DSL.

Metadata is usually `key => value` pairs, the can also have nested `key => value` pairs. The search needs to support this along with other basic operations.