During slice computation of affine loop fusion, detect one id as the mod
of another id w.r.t a constant in a more generic way. Restrictions on
co-efficients of the ids is removed. Also, information from the
previously calculated ids is used for simplification of affine
expressions, e.g.,
If id1 = id2,
`id_n - divisor * id_q - id_r + id1 - id2 = 0`, is simplified to: `id_n - divisor * id_q - id_r = 0`.
If c is a non-zero integer,
`c*id_n - c*divisor * id_q - c*id_r = 0`, is simplified to: `id_n - divisor * id_q - id_r = 0`.
@vinayaka-polymage There is probably a bug here: dimExpr.getPosition() can't be used to index into positions of the original constraints because it has the range [offset; offset + num) removed in getSliceBounds. I think quotientPosition should be used instead (and I guess this needs quotiontCount == 1 to work).
Also I think we need to check the lower bound as well (that it is >= 0).