Implement most of the tracking of module changes

This represents bulk of the work on #37. This turned way more involved than I expected, but most of the boring houskeeping code that handles reacting to the changes in a project (saving, deleting, editing, etc) is now done.

What's left is actually wiring this code to the UI, adding some nice icons and implementing support for files and projects that want to explicitly track files in a project (this should be fairly easy).