Verify that `recurse` arguments are strings.

Closes #9.
Error out if a recipe changes directory without changing back.

Closes #8.
Support DAG caching.

Closes #10.