#720 : resolve the slow SmartSave issue

As a summary, this PR does the following:

 - Code documentation: some of the methods in uavobjectutils are a bit tricky, I have strived to explain as clearly as possible in the code what is going on.
 - Refactor SmartSave : SmartSave used to manage a series of retries on top of the telemetry retries, it now lets the telemetry link do this, and focuses on following the correct workflow of update then save, then report the outcome.
 - Update UAVTalk: this is a backward-compatible change, i.e. boards that do not have this update will not be affected. Now, when an object updated is sent on the telemetry link with an ACK request, in case the object does not exist on the remote end, the remote end will send a NACK immediately. Previously it just ignored the object update. This speeds up the "Apply" and "Save" buttons in the GCS config gadget a great deal.

Note: there are quite a few debug statement in this PR. During flight and normal use, no additional debug output should occur, those debug statements only occur when sending objects from the GCS and doing save operations through the ObjectPersistence UAVO.