Feature/support initialization from hash

Use a hash for initialisation, to provide a more declarative syntax for constructing rules engine objects.
@johndagostino @jasonl are we ok with using hash.fetch(:key) as a way of raising an error if the key doesn't exist?