Fixed bug introduced Dec 30.  When I took out the optimization that said
"objects of different classes can't be same()", I didn't notice that
some of the comparison code assumed both objects had already been
confirmed to be the same class.  As a result, comparing an object of a
class with no fields with one of a class with fields could either pass
or crash, depending on the order.
Fix: put back in the "if (sameClass)" test, but applying only to a
smaller section of code, so it's still possible to override this rule
with same().