AD2: Try to Clean Up State Messages

This is only a start.
AD2: Don't Reset Mapped Zones Based on Alpha Messages

Mapped zones are faulted by direct messages received from the AD2.

This correction fixes the following oddity:

-------

Zones 1 and 3 are faulted.

The Alpha message describing the Zone 3 fault just arrived.

Zone 10, a mapped zone is then faulted.  The fault is immediately detected by an EXP! message.  MH updates the status of zone 10 to faulted.

AD2 then starts over with the Alpha fault list by sending the Alpha message that Zone 1 is faulted.

Since the last alpha fault received was zone 3, MH resets all zones between 3 -> 1 as ready, clearing out 10.

Two messages later, the Alpha message for zone 10 arrives, putting zone 10 back in a faulted state.

-------

This fixes the oddity by not reseting any mapped zones based on alpha messages.
AD2: Don't Perform Wrap-Around Reset, Unless Highest Zone is Consistent

The alphanumeric fault messages are more complicated than i realized.  The list of faulted zones restarts at the lowest faulted zone everytime a fault occurs.  So for example, if zones 1-5 are faulted, and the panel has just finished sending the zone 3 fault message, if zone 7 is then faulted, the next message will be a zone 1 fault again.

If we blindly perform wrap-around resets, it is very easy to create a "fluttering" zone when multiple zones are faulted.

To cut down on the potential for fluttering, this change only performs a wrap-around reset if the highest faulted zone that is reported remains constant for 2 cycles.  While not completly ensuring that all zones have been report, it is unlikely that the panel will be interrupted at exactly the same point in its cycle twice.

The major downside of this, is that there may be a slight delay in reseting zones from fault -> ready.  This is particularly true of the higher unmapped zones.
AD2: Optimize CPU Usage

Try to optimize code as much as possible.

On a dual core machine, using AD2 code seems to add between .3-.7% CPU usage to one of the cores.  I think this is mostly a side effect of using a socket.
AD2: Remove Extraneous Debuging Message