clean up dependency graph handling some more

The dependency graph is now done by storing edges in the ModelObjects themselves.

When score states dependency state changes (or they get destroyed), they invalidate the required score
states of everything below them.

The following invariants will always hold:
- exactly ModelObjects with dependency graph bit have correct edges in the dependency graph
- exactly score states with required score states bit are in the sorted order
- ModelObjects with score states bit have a sorted list of score states
- Model::has_dependnecies bit is true iff all ModelObjects have dependencies

There are a number of bugs, including on with Incremental scoring that causes the decay.py example to fail that hopefully will be fixed.

A problem is that certain things (eg restraints with pair scores) don't know all their inputs until they know all their inputs.