Add comment describing CellGrid in more detail
Various cleanups of RegularCellIndex and related things, preparing for moving to stream handling of documents
A bit more CombinedWordDist cleanup
Some cleanup of WordDist and related code, adding more asserts to check attempts to change a distribution after it's been 'frozen', or attempts to use a distribution before it's been 'frozen'
A bit of cleanup -- use imp_* instead of do_* for abstract functions that actually implement an operation and are wrapped by a concrete function that adds some extra functionality, e.g. verifying that things are done in the right order
Use DocType instead of DocumentType in the type signature of generic classes for conciseness
Rename placeholder types so that they consistently begin with T instead of ending in Type, to make them easier to identify and distinguish from class types, and shorten them whenever possible
Eliminate junky empty classes EvaluationDocument, EvaluationResult, instead making these types into type parameters; make DefaultEvaluationOutputter a trait on GeolocateDocumentEvaluator and such
Build up cell distributions in MultiRegularCells incrementally rather than remembering documents and doing it at the end -- a step towards not remembering training documents at all
Delete commented-out no-longer-necessary code in MultiRegularCell.scala
Fix a bug handling zero and negative floating-point values in format_float leading to infinite loop
Create ExperimentMeteredTask for a metered task that also calls `heartbeat` every time an item is processed, to tell Hadoop that progress is being made.  Use it in various places and eliminate unnecessary driver parameter passed in (retrievable from table parameter or other parameter).
One more step towars not recording documents before using them: Don't load eval set during training, and make an executive decision to eliminate dependencies on this (specifically, in incoming-link count); doing this has unwanted side effects on K-d tree generation.  Correspondingly, we need to handle the possibility that an eval document might not have a cell to go in.  It also means we need to redo the way we do evaluation -- we have to load and process the eval set during evaluation.  In the process, remove the (badly handled and in any case unused) possibility that initializing the distribution might fail to actually create a distribution.  Also remove `tiling_cell_to_documents`, which is no longer populated due to previous changes; but toponym/Toponym.scala depended on it, so restore the population of the map inside of Toponym.scala. (Note that Toponym.scala has *NEVER* been tested since being converted to Scala from Python! I keep fixing it up so it compiles and remains up-to-date, and fix logical problems as I encounter them, but it's highly unlikely it will work as is.)
Further separation of generic (Abhimanu-style) stuff from stuff specific to our applications
Clean up the statistics, old stats no longer relevant with various changes made
Move stack trace to where it will be more useful
typo
Also track records skipped due to error
Fix problems with GenerateKML due to ordering issues when creating word-dist factory
Use ExperimentMeteredTask instead of directly calling driver.heartbeat