Decision Procedures for Equality Logic and Uninterpreted Functions