Parameterized the SmartObject class to take the concrete subclass type so that the copy() method signature is more accurate.  Also implemented the Comparable interface to complete the canonical methods.
Fixed https://github.com/craterdog/java-smart-objects/issues/1
Fixed https://github.com/craterdog/java-smart-objects/issues/2