Fix and optimize FindTilesInCircle

* Added the `minRange` parameter and renamed it to `FindTilesInAnnulus`.
* For a couple of cases where an annulus was wanted, I replaced the `outer circle - inner circle` logic with a call to get the annulus.
* Fixed and optimized `NearestMoveableCell` and `NearestCell`. This changes the existing behavior where the min range was being ignored.
* The precalculated tile offsets are now sorted by distance to avoid sorting them later.
The tile cache is designed for maxRange being inclusive: it rounds the actual distance up to the next integer so that this call will return any cells that intersect with the requested range circle.  Exclusive ranges don't make a lot of sense when dealing with such highly quantized units.

This is going to change a bunch of behavior in subtle (and probably broken) ways.