Added support for autolayout and refactored internal code.

Just creating a pull request on our end for this.
Can you override these properties in Interface Builder?  I recall `initWithCoder:` requiring you to unpack the decoder and set properties that way.  Maybe this would all be better in `awakeFromNib`?