useradd.py: Use contextmanager to prevent leaked filehandles
useradd.py: Use contextmanager to prevent leaked filehandles

This also makes some optimizations by not assigning the output of
functions to variables when unnecessary, and changes this module to pass
arguments to the cmd.run functions as list instead of a string.

It also changes some weird behavior for the loginclass functions.
There's no reason to return a dictionary that will only have one
element, and there is no reason to return a string that is literally
just two quotes (i.e. '""') when there is no login class found. An empty
string is sufficient, and has the benefit of also evaluating as False as
a boolean.

saltstack/salt,saltstack/salt,saltstack/salt,saltstack/salt,saltstack/salt