Improve radar rendering performance

This introduces a CellEntryChanged event on CellLayer, and uses this to cut out most of the heavy looping from the radar updates.  These events will also be used by the ingame map editor, and should help significantly with our shroud rendering performance.

The old radar code split the update over 12 ticks, with only three of these doing actual work.  This is no longer necessary, which gives us a much smoother radar view.

I verified that this doesn't regress performance by timing `RadarWidget.Tick` over 1000 ticks on the biggest and smallest maps that I could find:
![histogram](https://cloud.githubusercontent.com/assets/167819/5260885/c092c220-7a78-11e4-9abb-26d9a4f7cd72.png)

1/ Awesome that you've cleaned up the worst-case performance.

2/ I don't buy being able to completely throw away the slower tick rate. I
don't have the raw data, but from eyeballing your Zeus graphs that looks
like you're increasing the total time burned in RadarWidget over those 1k
frames from ~1500ms to ~2800ms.

On Wed, Dec 3, 2014 at 9:08 AM, Paul Chote <notifications@github.com> wrote:

> In OpenRA.Game/Map/CellLayer.cs:
>
> > @@ -20,6 +20,25 @@ public class CellLayer<T> : IEnumerable<T>
> >  	{
> >  		public readonly Size Size;
> >  		public readonly TileShape Shape;
> > +
> > +		int cellEntryChangedCount = 0;
> > +		event Action<CPos> cellEntryChanged = _ => { };
> > +
> > +		public event Action<CPos> CellEntryChanged
>
> You're right. Lets chalk this up to a blonde moment.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/OpenRA/OpenRA/pull/7057/files#r21187202>.
>