[autotest] Teach afe rpcs to accept job_keyvals arg to pass general job keyvals

Add a job_keyval variable to afe rpcs, to pass a general dictionary of
keyvals to suite job. This dict of keyval can then be used by tko/parse
for any suite result operations or analysis.

BUG=chromium:690167
TEST=unittest and test on a testing server.

Change-Id: I8a348fee601257345b71ff0a573b18d0f2b9550d
Reviewed-on: https://chromium-review.googlesource.com/441151
Commit-Ready: Shuqian Zhao <shuqianz@chromium.org>
Tested-by: Shuqian Zhao <shuqianz@chromium.org>
Reviewed-by: Shuqian Zhao <shuqianz@chromium.org>
diff --git a/frontend/afe/rpc_interface.py b/frontend/afe/rpc_interface.py
index 0feb278..c6e4882 100644
--- a/frontend/afe/rpc_interface.py
+++ b/frontend/afe/rpc_interface.py
@@ -1879,6 +1879,7 @@
         run_prod_code=False,
         delay_minutes=0,
         is_cloning=False,
+        job_keyvals=None,
         **kwargs
 ):
     """
@@ -1930,6 +1931,7 @@
     @param delay_minutes: Delay the creation of test jobs for a given number of
                           minutes.
     @param is_cloning: True if creating a cloning job.
+    @param job_keyvals: A dict of job keyvals to be inject to control file.
     @param kwargs: extra keyword args. NOT USED.
 
     @raises ControlFileNotFound: if a unique suite control file doesn't exist.
@@ -2018,6 +2020,7 @@
         'test_source_build': test_source_build,
         'run_prod_code': run_prod_code,
         'delay_minutes': delay_minutes,
+        'job_keyvals': job_keyvals
     }
     control_file = tools.inject_vars(inject_dict, control_file)