Adding conditionals and refactored _resolve to be much more clear and easy to update

Hello sho, eford, jon, 

This PR adds basic conditional logic (see test/conditionals.js for usage). The syntax is still up in the air but we need something to try, so I'm going to ship as is (but not update the README yet).

As part of this effort, I refactored the _resolve() function in Builder to be easy to work with and to optimize (it was actually impeding my progress on the conditional work).

One of the changes to _resolve() changed the way hashing works to be a bit more ideal (hashing only the visible inputs to a node, not all inputs), so I made sure that the .disableCache() functionality works as expected and propagates throughout all dependent nodes (forcing a reload even if it's only a silent dependency).

All tests pass + a few new tests added.