Have osx::defaults enforce the value type of a preference key

Exec for `defaults write` will run if type doesn't match.

Currently, osx::defaults wouldn't call `defaults write` if the preference differs only by type. This prevents boxen from correcting defaults written with the wrong type; namely integers written as type *string*, the default type when one isn't specified explicitly.

Majority of this work by @sprickly from #66. I left out the screensaver security changes and resolved merge conflicts.

Necessary for boxen/puppet-osx#46 to correct keyboard repeat rate for users who already have those settings written as type *string*. I've tested that this change works by running it in conjunction with that PR.