Boundary conditions

Making this into a pull request to allow commenting, etc. Still premature to actually pull, but I think everyone involved knows that.
Why >= instead of ==? 

Calling constant_exterior with fewer args than there are dimensions seems like it's probably a programmer error.

Oh, except for color channels. Then this really does enforce our local convention that color channels come after spatial dimensions. I'll have to think about this. What if someone wants to add a boundary condition to dimensions 1 and 2, while leaving dimension 0 unbounded...