Use rules framework for ExternalPython

Whenever the source file or the arguments for the function change,
the function gets re-run.

This is potentially unstable. Use with care. You have been warned.
Potential side-effects include cancelled contests, zombies,
coaches going crazy, burning contest sites, etc.