Add `src` property to Module for control over I/O

This splits apart reading in the module src code from parsing it into an AST. By adding a `src` property to Module instances, there's now a hook to control file I/O — for instance to cache the src of unchanged modules between re-builds.