Equality tests must be symmetric!

By making the test for Y.has_foo() conditional on X.has_foo(), it was possible for X == Y to return a different result from Y == X!
Use automaton name in String() output.
Drop dead code.