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.