Graph clean

This PR is a little clean up I've been meaning to do.

For perspective, I initially wrote the exchange graph and greedy solver API at the same time. At that point, it wasn't as clear to me in which class some of the interaction API should live. This PR separates out the graph-only members into the ExchangeGraph class and the algorithm and graph-tweaking methods into the Solver class.