Two functional changes have been made here:
- Now search up from any add instruction to find the chains of operations that we may turn into a smlad. This allows the generation of a smlad which doesn't accumulate into a phi.
- The search function has been corrected to stop it falsely searching up through an invalid path.
The bulk of the changes have been making the Reduction struct a class and making it more C++y with getters and setters.
nit: indentation