Added and implemented ItemType + huge code cleanup.
- Ordered implemented methods by their interface and declaration order.
- Some whitespace cleanup.
- Return double values in methods that should return doubles.
- Changed abstract classes to final classes with private constructors.

  Making a class abstract does not prevent sub-classing and is like
  saying: "Please extend me."
  Making a class final with a private constructor prevents both
  instantiating and sub-classing.