[RFC] Refactor codebase

cc @mlubin @IainNZ 
I think relative gap is the most useful. We can probably just do transformations at the solver level  if that's not the exact form their API returns the data in.