auto-compile-on-load: handle semi-recursive case

When file A provides B and *then* requires B; and B requires A then
Auto-compile attempted to compile A multiple times.  This ultimately
lead to the compilation failing and the byte code file being removed.
Actually loading A and B still succeeded.

Now auto-compile-on-load keeps track of the files that are being
loaded and if the current file to be loaded is already in that list it
does not recompile that file again.