Insteon: Reorganize Structure for Generating Voice Commands

Generate_voice_commands in Insteon.pm now calls get_voice_cmds for each object.
get_voice_cmds is written to be inherited and modified by higher level objects
This allows for unique voice commands to be added to objects in their respective class files without messing with the base Insteon.pm file.

This commit merely copied over the voice commands as they existed before with little to no changes in the voice command design.

Fixes hollie/misterhouse#181
Insteon: Add Voice Commands to IOLinc
Insteon: Add KeyPadLinc Unique Voice Commands

Moved update_flags routine to KeyPadLinc classes
Added unique voice commands
Insteon:  Add Unique Voice Commands to Motion Sensor
Insteon: Add Message Tracking Statistics Features

Added a number of functions to track message details.
Added functions to print message statistics to the log
Added functions to reset the message statistics
Added 2 voice commands:
- print message statistics - prints details on all devices to the log
- reset message statistics - resets the message statistics to 0 for all devices
Insteon_Stats: Fix Print Message Voice Command Documentation
Insteon_Stats: Add a More Extensive Print Message Voice Command

Now collects and prints a total average for the entire network.
Insteon_Stats: Add new Saved Message Stats Variables
Insteon_Stats: Fix Bug Message Stats Should Increment
Insteon_Stats: Add Routine to Track Outgoing Hop Counts
Insteon_Stats: Add Routines to Track Duplicate Messages, Max Hops, and Hops Left
Insteon_Stats: Add Better Documentation of Print Message Log
Insteon_Stats: Beautify the Print Message Log Output
Insteon_Stats: Fix Bug in Call to Fail_Count
Insteon_Stats: Add Calls to Max_Hops and Hops_Left
Insteon: Save Setby Object in On_Standard_Received

Save the object so we can use it in print_log messages
Insteon_Stats:  Add Call to Corrupt Log Count
Insteon_Stats: Track Hops in Duplicate Messages

They still provide some detail on how long messages take to arrive.

There may be one issue in that this may catch subsequent deliveries of the same message with a lower hops_left count.  Such as when the message is delivered on the 2nd and 3rd hop.  But at the same time, sometimes the messages that should take longer to arrive, as they have used more hops, somehow arrive first, so this may be a wash.  In the end, the best way to avoid this problem is to use proper hop counts.
Insteon_Stats: Add Calls to Outgoing_Count and Hop_Count
Insteon_Stats: Cleanup Print All Messages to Ignore Non-Root and Non-Responders