feature: cache + depth support + more test support

Autoloader now uses a cache; however if it fails to find a
symbol it will imediatly invalidate it's cache and recalculate
if it was in a cached state; the invalidation will cause a new
cache to be saved but the autoloader will remain in a
"non-cache" state for the rest of the session.

This is fine 99% of the time, with the only exception being
3rd party non-freia libraries but the issue of handling cache
invalidation and symbols that the system should somehow know
it doesn't need to cache is... tricky.

The problem of known-unknowns is quite hard and may be too hard,
since even if a method existed of storing symbols that other
autoloaders loaded existed it would horribly break such things as
replacement symbols in known libraries appearing.

In addition to that known unknowns of future knowns is problematic
in and of itself.

Currently the cache is only on the environment.

-

The scanning for modules algorythm has been greatly improved; it
will now cap at a depth of 3 (for reference if you have a standard
vendor structure such as that generated by composer even 2 is
enough to get the job done).

-

Many calls too sensitive php functions have been proxied away,
for obvious testing purposes.