have a source file be aware of which configured source it belongs to

This is the first step to using per-source engines.  This source
file needs to know which configured source it belongs to so it knows
where to get its engines.

This uses a similar algorithm to looking up source files by digest
path (`find_by_digest_path`).  It scans the sources for ones where
the source path is included in its path.  If multiple match, the
last matching one is chosen to match the last matching source file
path in the digest lookup.  Since the last matching file path (from
the last configured source) is always in use, we should match this
and make sure the last source is always in use as well.
change the source config API to allow setting source attributes

This alters the source configuration API to allow passing a block
that can set source attributes.

This is to prepare for configuring engines directly on individual
sources.  A source will have an engine registration api that the
user needs to be able to access at config time.  This change allows
for that.
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.
register new engines with a `source_path` default option

This means the path of the source that the engine was registered
on is available to all engines by default.  This information is
handy for, say, referencing other files (like partials) with
paths relative to the source path.
minor change to the source's `filter` handling

Instead of treating the filter as an accessor, just have a `filter`
method that sets the filter if given a block, otherwise returns the
current filter.

This acts like the reader we want but is a nicer API for specifying
a new filter.
Merge pull request #52 from redding/kr-persourceconfigs

Register engines to individual sources