Differentiate between adding constraints and laying out subtree

Callers may not want to cause a layout pass when adding constraints; `layout` maintains the previous behavior, but calling `constrain` opts out of calling `layoutIfNeeded`/`layoutSubtreeIfNeeded`.

(Calling `layout` from `init(frame: CGRectZero())` gave us unsatisfiable constraints warnings until the view was added to a window and given a width/height; `constrain` is safe to call before a view is added to a hierarchy.)