Implement asynchronous job management to ensure jobs can be
successfully completed even if those jobs temporally fail
for some reasons. The detailed design can be found in section
9 in design document.
This patch focuses on defining database schema and building
lock mechanism to avoid running the same type of jobs at the
same time.
Enabling workers to rerun failed job and purge old job records
will be covered in the following patches.
Change-Id: I87d0056a95eb7cb963e1c3599062a60299472298