Builds objects with restricted attribute update access. Inspired by Peepcode's Play by Play screencast with Jim Weirich.