Update devserver to support downloader other than from Google Storage

Main changes:
1. Restructure artifact wrappers to support both CrOS and Android artifacts.
2. Support different downloaders in devserver.py.
3. Add LaunchControlDownloader class, the functions are to be implemented.

BUG=chromium:512668
TEST=run_unittests, devserver_integration_test.py, guado_moblab (au and dummy)
cros flash and cros stage to guado moblab

Change-Id: Ia350b00a2a5ceaeff6d922600dc84c8fc7295ef9
Reviewed-on: https://chromium-review.googlesource.com/301992
Commit-Ready: Dan Shi <dshi@chromium.org>
Tested-by: Dan Shi <dshi@chromium.org>
Reviewed-by: Dan Shi <dshi@chromium.org>
diff --git a/devserver_integration_test.py b/devserver_integration_test.py
index 49eea74..d37d62d 100755
--- a/devserver_integration_test.py
+++ b/devserver_integration_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python2
 
 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
@@ -18,6 +18,8 @@
   ./devserver_integration_tests.py DevserverIntegrationTests
 """
 
+from __future__ import print_function
+
 import devserver_constants
 import json
 import logging
@@ -176,7 +178,7 @@
       try:
         self.port = self._ReadIntValueFromFile(self.portfile, 'portfile')
         self.devserver_url = 'http://127.0.0.1:%d' % self.port
-        self._MakeRPC(CHECK_HEALTH, timeout=0.1)
+        self._MakeRPC(CHECK_HEALTH, timeout=1)
         break
       except Exception:
         time.sleep(DEVSERVER_START_SLEEP)
@@ -434,6 +436,7 @@
 
   def testStageAndUpdate(self):
     """Tests core autotest workflow where we stage/update with a test payload.
+
     """
     build_id = 'x86-mario-release/R32-4810.0.0'
     archive_url = 'gs://chromeos-image-archive/%s' % build_id
@@ -463,6 +466,7 @@
 
   def testStageAutotestAndGetPackages(self):
     """Another autotest workflow test where we stage/update with a test payload.
+
     """
     build_id = 'x86-mario-release/R32-4810.0.0'
     archive_url = 'gs://chromeos-image-archive/%s' % build_id
@@ -491,6 +495,7 @@
 
   def testRemoteXBuddyAlias(self):
     """Another autotest workflow test where we stage/update with a test payload.
+
     """
     build_id = 'x86-mario-release/R32-4810.0.0'
     xbuddy_path = 'remote/x86-mario/R32-4810.0.0/full_payload'