Add #define_predicate for per-node predicate definitions

Allows custom predicates to be defined within a particular node. This makes it easier to create predicates with a nice label. The label will be taken from the predicate name by default, or can be overridden.

```
# Default label: "is_red?"
define_predicate(:is_red?) {|response| response == 'red'}
```

```
# Define a custom label: "Is it red?"
define_predicate(:is_red?, "Is it red?") {|response| response == 'red'}
```