Condition functions

Each entity can be associated with various conditions. And
for each of these conditions there's a set of actions that
will be performed in sequence when the condition is true. If
an entity has multiple conditions that are true
simultaneously with different sets of actions associated
with each condition, then all the actions are performed for
each condition, in sequence.

This mechanism lets you combine actions together into sets
and choose to remove/control them as a single
"group" instead of as individual items.

Since conditions are associated with entities, an
entity handle must be available in order to add
conditions. The ham_condition*() functions return
an opaque pointer that is a condition handle, which you can
use later to either remove a condition or add actions to the
condition.