Ext mixed bcs

Extend sparsity maps to a general "decorated map" type that allows us to attach arbitrary extra information to a Map.  Use this new type to change the implementation of top and bottom extruded boundary conditions such that they are applied on a per-map, rather than per-par_loop basis.

Wants a PyOP2 version bump, I think, because it's incompatible with firedrake.
If `iteration_region` or `implicit_bcs` are not `None` they *do* however replace the existing data.