Add support for nested jobs, caching, and performance enhancements for job status updates

So, you said "... or retrieve the latest results from the server and then save them, and return them".  However, if the cache has expired, you are not saving them to _allJobs - you are only returning the list from the API.  So, the next time GetAllJobs is called, the results of _allJobs will be the old result set.  This change corrects that problem, and then eliminates the need for you to save the results of GetAllJobs() to _allJobs, like you are in GetProjectList().  You can just call GetAllJobs() whenever you need to get the cached or current list of jobs.