Added strong typing for equals, interface for equals, hashcode, some tes...

I added some tests for equals and hashCode.  Basically they test all the Java requirements for both methods, except "two objects with the same hash do not necessarily have to be equal"; didn't want to do the math to figure that one out.  I did not change the actual methods, feel free to play with them if you have any ideas for checking equality on peers and pool.  Just keep in mind that whatever fields equals is checking have to be part of the hashCode calculation.  Also added strong typing inside the equals method and the interface stubs for both.

@stevilstick  @SterL @JamieWohletz @ankenmanp @moquin101 @Kimmsudenver