Now validates if a binary expression's left hand side and right hand side are reduceable to the types they can be, both for expressions that can hold one type (Add for example) as one that can hold several (EqualTo and NotEqualTo).
Visitor can now also check UnaryOperations. Also refactored some more.