Start refactoring for cache support

In order to be able to add support for caching mock generation we
first need to pull out the functionality that would be different when
mocked into one thing that we can replace.  This will be the
realPackage instance hiding behind the Package interface - then we can
use a cachePackage instance instead when pulling from the cache.
Push more functionality into Package

Working towards the point where all package related functionality sits
in one place so that we can start adding caching functionality.
Though I am starting to rethink my design.  It may be that the caching
functionality should be inside realPackage - as the different bits may
want independant caching ...
Move un-mocked stdlib ignore earlier

Now that we are looking up packages we need to ignore un-mocked stdlib
packages before we look them up - otherwise we are either wasting our
time, or in some cases actually causing problems trying to lookup
virtual packages that we would have just ignored.
Add more functionality to Package

Slowly working towards putting all the appropriate functionality in the
Package interface.
Add a new facility to provide mocks

In addition to automatically generated mocks indicated by // mock, we
can now use manually generated mocks by using // replace(import/path)
to use a different package in place of the named one.

This means that we can use manually generated mocks where we cannot
manage to generate an automatic mock (either due to bugs or to the way
the code is written).