IndexOutOfBounds Exceptions and Type Arguments

Changed the IndexOutOfBoundsExceptions to NoSuchElementExceptions as the IndexOutOfBoundsException was an implementation detail.  

Removed the throws declaration from the method signature line for RuntimeExceptions as some RuntimeExceptions were declared in the method signature line and some weren't.  This was done for consistency.

Added the type argument to NumberChain and NumberChainEngineImpl since the raw type of Comparator was being extended and causing compiler warnings.