A Decision Procedure for Equational Reasoning in Commutative Algebraic Structures