Add support for predicate/function evaluation in quest meta.

The eval code wasn't just scary, it was troublesome to write.  Using
the new approach, predicates and functions already specified in the code
are referenced with parameters, and the return values are either used in
the expressions or used to store needed values.

I'll probably have to change the filename though.  This started out as
pure predicates, but it's clear we need functions for things like saving
game state in the meta data, and that means functions too.