DSCL User Provider Rewrite

* Dscl user provider changes to support Mac 10.7, 10.8 & 10.9.
* Make the dscl user provider password handling idempotent.
* Refactor / modernize dscl user provider unit tests.
* Functional tests for dscl user provider.


* Fixes https://github.com/opscode/chef/issues/1647
* Fixes https://github.com/opscode/chef/issues/1634
* https://tickets.opscode.com/browse/CHEF-2813

/cc: @opscode/client-engineers, @jaymzh, @juliandunn 
I think this error message really needs to contain an explanation for what requirements aren't met. Maybe you could extract the code in lines 68-85 into a private method, and have it return an Array of `[valid<Boolean>, error_reason<String>]` ? Either that or have 3 assertions which would be a lot more verbose but also more declarative.