Integrity checking addition

If we're going to expose a public class that users are expected to use, then we really should correctly implement `equals`, `toString`, and `hashCode`, and make the instance variables `private`.