Get xbuddy to work with image_to_live correctly.

There's a lot of small issues here that just piled up. XBuddy pretty
much didn't work at all with image_to_live -- xbuddy:parrot/latest-canary/test
just threw errors. This CL fixes that and addresses some other issues I found
along the way.

1) Added a new flag to xbuddy to return an update_url and had image_to_live
use this specifically rather than rely on --pregenereate_update hack that
FLAGS_image uses.
2) Killed log_thread. This always left a hanging log because of -t -t because
it effectively disconnected the thread from the main script.
3) Optimized update worfklow (from 1) to try to download test / stateful
from GS if they are available as downloading the whole image + processing
an update sucks.
4) Cleaned up some docstrings and fixed board overrides.
5) Piped dev image logic through.

BUG=None
TEST=all unittests, image_to_live with various xbuddy strings and FLAGS_image
+ AU vm tests in CQ.

Change-Id: I4e60394451f7ff3e31be48167d32240160c18895
Reviewed-on: https://chromium-review.googlesource.com/171260
Tested-by: Chris Sosa <sosa@chromium.org>
Reviewed-by: Don Garrett <dgarrett@chromium.org>
Commit-Queue: Chris Sosa <sosa@chromium.org>
Reviewed-by: Gilad Arnold <garnold@chromium.org>
diff --git a/downloader.py b/downloader.py
index 7bb2dd0..1177db9 100755
--- a/downloader.py
+++ b/downloader.py
@@ -124,10 +124,14 @@
     non-specified artifacts in the background following the principle of
     spatial locality.
 
-    artifacts: A list of artifact names that correspond to
-               artifacts defined in artifact_info.py to stage.
-    files: A list of filenames to stage from an archive_url.
-    async: If True, return without waiting for download to complete.
+    Args:
+      artifacts: A list of artifact names that correspond to
+                 artifacts defined in artifact_info.py to stage.
+     files: A list of filenames to stage from an archive_url.
+     async: If True, return without waiting for download to complete.
+
+    Raises:
+      gsutil_util.GSUtilError: If we failed to download the artifact.
 
     """
     common_util.MkDirP(self._build_dir)
@@ -179,10 +183,15 @@
   def _DownloadArtifactsSerially(self, artifacts, no_wait):
     """Simple function to download all the given artifacts serially.
 
-    @param artifacts: A list of build_artifact.BuildArtifact instances to
-                      download.
-    @param no_wait: If True, don't block waiting for artifact to exist if we
-                    fail to immediately find it.
+    Args:
+      artifacts: A list of build_artifact.BuildArtifact instances to
+                 download.
+      no_wait: If True, don't block waiting for artifact to exist if we
+               fail to immediately find it.
+
+    Raises:
+      build_artifact.ArtifactDownloadError: If we failed to download the
+                                            artifact.
 
     """
     try: