Boundary conditions

Making this into a pull request to allow commenting, etc. Still premature to actually pull, but I think everyone involved knows that.
For boundary conditions, I've often found that using a closed interval (min/max) is more natural than min/extent. That's what clamp does too, which is how people are currently implementing boundary conditions. The ImageParam type provides .left() .right() .top() .bottom() for this purpose (though people typically use 0, width-1 instead, probably thanks to some bad examples we have lying around). Thoughts?

Of course, that's not what buffer_t does, or Func::bound.