Move engine registration api to the source model

This configures and tracks engines on a per-source basis.  This
"sandboxes" engine usage and options to the set of source files
they are registered on.

Now 3rd-party tools, etc, can not only add their source, but also
specify the engines needed to compile the source with tool-specific
settings.