Solving equations in abstract algebras: A rule-based survey of unification