Insteon: Add Methods to Support Delayed Deaf Device Communication
Insteon: Do Not Send Commands to Deaf Devices Not Awake
Insteon: Set Last Contact on Received Message
Insteon: Set Default Awake Time
Insteon: Move is_awake to BaseObject; Fix Coding Error in BaseInterface

-_process_command_stack is in BaseObject, which requires is_awake to be there too, otherwise we get errors with InterfaceObjects
-Fix stupid error s/$self/$object/ in BaseInterface
Insteon: Move ALDB Delta Checking in Batch Scan to BaseDevice

This is needed in order to allow for delayed scanning of deaf devices.

As a side effect, it makes the code much more condensed and readable.
Insteon: Queue Scans of Deaf Devices Last

- Add log message explaining what is happening
- Send command to scan each deaf device individually, this should result in the requests being queued, unless the device is awake
- Because these commands will be fired off when the various devices are randomly awake, these have to be individual "uncoordinated" scans.  In the worst case scenario, this will cause the scanning of numerous devices to happen at the same time.  While not ideal, this can't simply be avoided, however, the stack should be robust enough to handle this without error now, although it may be confusing to the user.
Insteon: Add Log Messages to Appear at Conclusion of Delayed Scan
Insteon: Queue Sync Requests for Deaf Devices for Later Delivery

Sync these links when the device wakes up

Also clean up Sync_All_Links routine a bit
Insteon: Revert Including Deaf Devices in Batch Commands

- On further thought, including deaf devices in batch commands is a bad idea.  Many deaf devices are rarely contacted, yet a user may run the batch commands frequently.  This may result in a TON of queued messages for a deaf device, which may result in too much traffic when the device is finally contacted.

- The better course of action seems to be to force users to run these same commands on the specific deaf devices.
Insteon: Allow Delete Orphans to Be Run on a Single Device.

Using Delete Orphans on a single device is not generally advisable.  Delete orphans works on the device level and not the link level, meaning it only cleans up a specific device, which may result in "half-links"

Now, this shouldn't be too much of an issue for deaf devices as the batch command of Delete Orphans will allow "half links" to be created by deleting responder records from deaf devices.  As a result, the command on a deaf device will simply clean up the half links.  (I hope that makes sense)
Insteon: Add Voice Commands for Deaf Devices

Since batch commands will not work on deaf devices, needed to add two AUDIT commands

Also add a Delete Orphans command
Insteon:  Add voice commands for Deaf Devices; Monitor Mode

Enabling Monitor Mode has other benefits.  Adding it as a voice command option.

Adding POD documentation for voice commands.
Insteon: Attempt to Reconnect PLM if it Appears to be Down

- Add flag to track if a message sent to the PLM has been acknowledged by the PLM
- On retry, if no receipt was acknowledged by the PLM, attempt to re-open the PLM serial port

Should fix hollie/misterhouse#397
Insteon: Remove DeviceController Class

Reorganize inheritance structure to be linear, rather than branched.

We can likely merge BaseController down into BaseObject as well.
Add Serial_Port_Close Routine; Insteon Close Serial Port Before Restarting

Add simple routine to mh "binary" that closes the serial port in the manner recommended by the Device::Serial_Port documentation.

Change Insteon_PLM serial port restart routine to close the port before re-creating it
Merge pull request #401 from krkeegan/fix_issue_397

Insteon: Attempt to Reconnect PLM if it Appears to be Down
Merge pull request #400 from krkeegan/fix_issue_280

Insteon: Remove DeviceController Class
Merge pull request #399 from krkeegan/fix_issue_183

Insteon: Improve Support for Deaf Devices; Add Delete Orphans Capability