Push declareOutputFields down into Bindings as declareFields.

Instead of dealing with a declarer, it merely mutates a passed list of fields.  This gives us the chance to alter the list further before handing it to the declarer.
Drop unused constants.
tweak