Dag as method

I'll keep pushing to this PR as I develop.  The tests won't all pass since this change is so deep it will take a while before they do.