Reorganized Iterable and Iterator classes

I reorganized the iterable and iterator classes to be more consistent.  There was a mixture of static methods (guava style) and class implementations (apache commons style) for these.  I chose to follow the guava style of using static methods as it makes for less verbose code to use it.  Additionally, I made sure that iteration manipulations could be applied to both closeable iterators and iterables. 

Additionally, I tried to keep the contract that all Iterables will get a new iterator each time one is requested.  This means that a CloseableIterable can reiterate over the data, while a CloseableIterator will be exhausted when hasNext returns false.