Allow granular control of user attributes

Few things going on here, but the overall goal of the PR is to: 
* Allow for granular control of attributes on a user by user basis
* Allow for SSH key management for users 
* Migrate to explicitly resource definitions instead of nested classes (puppet lint doesn't like it due to http://docs.puppetlabs.com/guides/style_guide.html#separate-files)