Fatal.pm: Add a cache for CORE subs that can be reused

Some CORE subs can trivially be reused without compiling them into a
given namespace.  With this, the average load time of "use autodie;"
(after the first) is reduced by ~0.006 seconds (0.019s -> 0.013s).

Signed-off-by: Niels Thykier <niels@thykier.net>
Merge branch 'master' into cache_improvements
Check for lexical autodie leakage of utime (and other reusable subs).
Merge branch 'master' into cache_improvements
Merge branch 'master' into cache_improvements
Fatal: Conditionally compile the leak guard in caller namespace

Only compile the leak guard into the caller's namespace if the wrapper
sub is compiled into the namespace as well.

Signed-off-by: Niels Thykier <niels@thykier.net>
Fatal: Add lexical vs non-lexical CORE sub cache

Signed-off-by: Niels Thykier <niels@thykier.net>
Fatal: Fix two mistakes with core subs.

Mistake 1: store the cached CORE:: sub under the right "name" in the
table (else it won't be used).

Mistake 2: Return the "original" sub instead of the wrapped sub when
using the cache.  This fixes a problem with cleaning up the cached sub
when they are unimported (for whatever reason).

Signed-off-by: Niels Thykier <niels@thykier.net>
International documentation on cache imprvemets.
Merge branch 'master' into cache_improvements
Checking for filename sensitive leakguards being cached.

When we install a leakguard, it includes the file that 'use autodie' was called in.
If that leakguard gets cached, then installing the cached copy in a different file
will result in autodie no longer working there. The leak guard spots a different
filename, and immediately reverts back to using the CORE behaviour.
Fatal: Avoid generating leak guards via string eval

Signed-off-by: Niels Thykier <niels@thykier.net>
'Sup Perl::Critic. That string eval? Yeah, we know what we're doing. :)
truncate() and chdir() aren't reusable. Sadface.
Fatal: Cache lexical subs better

For lexical subs, we can still cache them to avoid re-compiling the
"checking" code each time.  We still have to wrap them in a "per-file"
leak-guard.

Signed-off-by: Niels Thykier <niels@thykier.net>
truncate() and chdir() are reuseable after all! <3
Merge branch 'master' into cache_improvements
Merge branch 'master' into cache_improvements
Further comments on why truncate() is okay to cache.
Fatal: Don't generate code if we got the compiled copy

Skip the code generation for lexical subs that just need a new leak
guard.

Signed-off-by: Niels Thykier <niels@thykier.net>