Improve cfor's handling of non-literal function arguments.

This commit supports two styles of cfor:

1. "clean" where arguments are Function or Ident trees
(i.e. literal functions or references to previously-bound functions).

2. "dirty" where arguments must be rebound to vals
(e.g. for expressions return functions).

This fixes #75. Thanks to Olivier Chafik for catching this!