Make Module.__load_file() play politely with the module protocol.

If the file being loaded does any imports of its own, we got a warning about the
parent module, doing the import, not being in the module table.  So put it
there, transiently, during the load; and restore the module table when we're
done.  Also move import of sys outside the method, so we only do it once; and
decouple repr from __doc__, as loading might over-write that.
Petty typo fix.
Add a recursion-protection decoration, recurseproof.

This is wildly generic; specific users may be able to do equivalently cheaper,
but this lets even them be lazy.  Does require being clear about which
parameters are and are not hash()able, or are ignorable.