Added code to specialize_branched_loops to limit the depth of branching allowed so as to avoid the problem of combinatorial explosion of code generation. For now this limit is a compile time constant set at 5, so we only generate on the order of 2^5=32 branched loops automatically. We could consider providing an interface for changing this value, and/or experiment with finding an optimal value.
Fixed a bug in the linear solver when the coefficient of the solved variable is 0. In this case the returned inequality will now have a 0 on the LHS instead of the variable, so classes that use the solver should check for this case.