Add support for saving ALDB_Delta

Add basic code for storing and saving the ALDB_Delta.

ALDB_Delta and related functions are most related to the ALDB object not the device object.  Moving and rewriting code from initial ALDB_Delta branch.
Enable Framework for Skipping Unchanged Devices in Scan All Linkes

Alter Scan All Links so that when the first argument passed is true, devices which are unchanged will be skipped
Add Query ALDB Delta to ALDB object

also fix a typo
Intercept status_request responses for Query ALDB Delta

Add framework to catch status_request responses that were requested by query aldb delta
Query for ALDB Delta at end of Device Scan and Store

Moved the callback contained in the last _on_peek method to the is_info_request routine of the device.  Setting the ALDB_Delta will only be done at the completion of a scan, so the aldb success callback can be used.
Sync All Links, Skip Devices that have not changed

Made a mess out of the _get_next_linkscan sub, but it works.
Prevent Adding a Link if ALDB is Out of Sync

Changes made to ALDB_i1 Add_link so it will prevent any adding of a link from any voice command.  The code looks like crap, references and callbacks stacked on top of references and callbacks.  What a mess.

Should be able to do the same thing for update and delete using the same method.
Force Check ALDB_Delta Prior to Deleting Links

Copied logic from add_link

Also fixed a stupid error in _get_next_linkscan, but code is still a horrible mess, which is my fault.  And it still has problems.
Fix Typos in Delete_Link, Fix Logic for Checking ALDB Delta

Stupid mistake. Fix typos in Delete_Link which used a callback to add_link or referenced adding a link.

Fix logic in delete_link and add_link to make sure that an out of sync device is not altered.
Change ALDB health nomenclature corrupt is now out-of-sync
Update Link Table Health on all Status Requests

Setup foundation for skipping aldb_delta check if link table health is bad
Skip requesting ALDB_Delta if MH Link Table is out-of-sync

Requesting a status is unnecessary if we already know we are out-of-sync
Dont Request ALDB_Delta if it is less than 2 Seconds Old

Assume that the device link database won't change in less than 2 seconds

This is in anticipation of syncing multiple links to the same device in sequence.  This way we only check the ALDB_Delta at the start of the sync process.
Peek address after add_link and set new aldb_delta

Call peek of the address altered by add_address to confirm that it was accurately poked in.

Required to enable a scan_one action in _on_peek which reads one address then queries the aldb_delta.

Sync links can now sequentially add links while keeping the aldb databases and the aldb_delta in sync.
After delete_link scan the address and store ALDB_Delta

Copying the concept used in add_link
Only Mark Duplicate in ALDB if address is not the same

When scan all links, MH ALDB database is cleared.

But for scan_one which only scans a single address, we don't dump the ALDB database.  So the fact that an aldbkey already exists does not make it a duplicate, we could be scanning the same address again.  It is only a duplicate if the addresses are different.
Call Query ALDB_Delta for scan_one after delete

Since we skip peeking anything but the ALDB_Flag.  We need to have a call to query_aldb if called for scan_one only.

Fix krkeegan/misterhouse#2
Bump ALDB_Delta if Set to 00

The ALDB_Delta gets reset to 00 when devices lose power.  The ALDB_Delta also gets reset to 00 when the devices are factory reset.

Since we can't distinguish between these two states, we never allow the ALDB_delta to stay at 00.

If a devices loses power, the ALDB_delta will change and a full scan will be conducted.
At the conclusion of the scan we attempt to query and store the aldb_delta.
If the aldb_delta is 00 we find the first empty address on the device.
We then peek the aldb_flag(the first byte) of this address
We then poke the same value back into the device.
We use an empty address to decrease the potential harm from writing an incorrect byte if something goes wrong
We then scan this address, being empty, the scan should end after the first byte
We then query the ALDB_delta which should now be 01 since we "wrote" a single byte.  The value increases even though the data didn't change.

I reverted the previous commit as I was headed down the wrong path.

Solves krkeegan/misterhouse#3
Enable Aldb_Delta Support for Update_Flags

Checks whether Aldb_delta is insync prior to updating flags.  If insync, resyncs aldb_delta after update_flags, if out of sync, update flats is still permitted to run, but no subsequent update of aldb_delta is made afterwards.

There is no potential for update_flags to overwrite a link entry, so it shouldn't fail if out of sync.

Partially fixes krkeegan/misterhouse#5

Need to make a similar patch for update_local.
Enable Aldb_Delta Support for Update_Local

Similar to prior commit for Update_Flags.

Completes the fix for krkeegan/misterhouse#5