Improved consistency and formal correctness of all existing .equals methods to meet IntelliJ's convention.

* added null handling so equals methods return false for null argument
* replaced instanceof with getClass to force strict type equality
* added @Override for equals and hashCode where missing
* minor refactorings in equals methods to simplify and improve consistency
* added missing hashCode for ListMessage based on equals definition

Things that HAVE NOT changed:

* set of attributes used for equality checking
* hashCode calculation (except for added hashCode in ListMessage)
* correlation between equals and hashCode
* no new equals methods added
Fixed type references in javadoc to avoid IntelliJ error reports on rebuild.
Dealt with several compiler notices by verifying and then fixing or suppressing. Reduces compilation output noise.
Renamed proofOfWorkLimit to maxTarget along with get/set and minor refactorings.

* proofOfWorkLimit renamed to maxTarget to get it more inline with commonly used terminology (wiki, etc.)
* some misleading local variables renamed from 'difficulty' to 'target'
Resolved conflicts from upstream changes