Advice about refactoring LinearFractional.jl for JuMP 0.19 and Julia 0.7

It will be great if we can avoid creating a specialized variable type. Doing so would require us to write/copy code for operators, affine expressions, and other downstream methods. This is what we had in the old version.

We made an effort with JuMP v0.19 to have a well-defined API for AbstractVariableRef and have all the operators, affine expressions, etc… work on top of this API.
We have an example implementation in the test:

all the operators tests, etc… are run with this example implementation to guarantee we don’t break things for custom implementations of AbstractVariableRef in the future.