ENH: add top-level eval function

closes #3393.

This is a ways from being mergeable but I thought I would put up the PR for
people to play with and to get some other eyes on it. Tire-kick at will. A
consolidated list of things to be completed to come...