Have setter and lazy respect type constraint.

Also fix bug where lazy default was assumed to be callable (which is
valid) but operated purely on the input value.