Fix init func naming

The way that we generated init function names wasn't good enough.  It
was fine when we always generated the entire package - but with
caching it becomes unreliable and can produce repeated function names.
Switch to a new mechanism that uses timestamps so that there is no
risk of creating duplicate function names.
Improve the stdlib test framework
Excluded packages should turn off mocking

If a package has been excluded then we change it to disable mocking -
so that it can use other packages unmocked.
Add GOROOT to cache key

We can't reuse cache entries if the Go we are working with has changed
- so we add GOROOT to the cache key.

We also need to add the Go version in case a new version has been
installed in the same GOROOT ...
Add Go version to the cache key

Now we include the Go version in the cache key - so we won't reuse
cache entries created with a different version of Go.