Given an array of expression pairs (match_target, e), attempts to assign mvars in e to make e equal to match_target (without making any assignments to mvars that appear in protected_mvars). Returns true and performs mvar assignments if successful, returns false and does not perform any mvar assignments otherwise