I saw you add many this kind of available checking before setup tools in guest.
Just have some idea about:
1. This may have us save sometime when tools already installed in guest. But most time we will install a new guest at the beginning of test loop. So this check may could not save time for us. 
2. It may make the tools update fail.  We have already install the old version tool in guest. If we want to update it to a new version.  It will fail at this situation.  As we only check available in guest, but do not compare the version or md5.

So I am thinking do we really need this kind of available checking before setup tools in guest?   Does it can save many time for us?

The answer, from my side, is no.    And it also make the situation more  complex.

Thanks