Three optimisations for city lookup.

Changes:
 * Coercing the latitude and longitude to floats for performance during lookup
 * Batching up to 100 city updates in a single javascript interpreter entry
 * Adding quick Manhattan distance check which avoids using trig functions

The main bottleneck is the method of iterating over cities with setTimeout. The profiler suggests about 50% of time is spent updating the UI and only 50% is spent analysing the data now.