fixed bug where Shape.compareTo() returned 1 if the shapes were considered "equal" (...it's supposed to return 0)
removed redundant PieceName.toString() override (Enum.toString() by default already returns the name, it is redundant to override it to do the same thing)
changed Hand.view() to use Collections.unmodifiableList() instead of making a new ArrayList
added factory method to Shape to restrict creation of illegal Shape objects