factor, expand, subs improvements to Sum

- introduce _eval_factor for recursive-calling
- added _eval_expand and _eval_factor features for Sum
- new implementation of Sum._eval_subs
- use C.Add and C.Mul instead of Add and Mul
- additions to test_sums_products.py
updates for jrioux comments

- overload _eval_expand_basic, tests now call on Sum.expand()
- switched isdisjoint tests to empty intersections
- handle hints correctly in Sum._eval_expand_basic and Sum._eval_factor
- avoid Karr convention issue in test