CHEF-3582: Fix #check_lock under why-run

We assume in whyrun mode that a non-existant user would be created before we
attempt to lock it, so we return false from #check_lock when user does not
exist and we are in why_run mode.

Conflicts:
	chef/lib/chef/provider/user/useradd.rb
added the initial command for checking environment cookbook contraints.
renaming to compare and braking the code up into some functions and added unit test, also added the -m mismatch option.
removing some comments and it seems I really cannot type the word constraints correctly. Or I should just drink less beer when coding..
[CHEF-4363] Allow adding event_handlers via config file
[CHEF-4363] Remove unnecessary restoration of Chef::Config
Allow single letter usernames.

On non-Windows platforms single letter usernames are valid,
so make the valid user regex allow them.
CHEF-4633: fix inefficient assignment in deep merge
[CHEF-4673] Change docs URL in chef-shell.
[CHEF-4676] Update pinning on net-ssh-multi to ~> 1.2.0
[CHEF-4676] Remove overly-aggressive version pinning per @lamont-granquist
pass elapsed time along with node/exception in event hanlders
compute elapsed time without altering public api
CHEF-4379: initialize @end_time to @start_time

Prevents a TypeError when working with elapsed_time if something unexpected
happens.