Bug #2503: Improve setting of password/auth_driver

UserChangePassword followed this strategy:
  a1. Eventually encrypt user password if the users
      auth_driver is CORE_AUTH
  a2. Set (probably encrypted) password with
      User::set_password
  a3. User::set_password tries to validate (probably
      encrypted) password instead of the raw password

UserChangeAuth did something similar:
  b1. If password is given (not empty) do a1 through a3
  b2. Set auth_driver

The change proposes the following:
 * In set_password:
    1. Validate the raw password
    2. Do encryption if needed
 * In UserChangePassword: simply call set_password
 * In UserChangeAuth: set auth_driver *before* calling
   set_password, such that set_password does the right thing
   if the auth_driver changes

Note: I needed to move the implementation of set_password
from User.h to User.cc since it seems impossible to access
UserPool::CORE_AUTH from within User.h.