Add support of SMTP authentication

This patch adds support of SMTP authentication w/ or wo/ SSL or TLS.
Nit: please compare to `None` using `is` and `is not` rather than `==` and `!=`.

There are four cases here:

* `smtpuser is None and smtppass is None` - don't use authentication
* `smtpuser is not None and smtppass is not None` - use authentication
* `smtpuser is None and smtppass is not None` - **error**
* `smtpuser is not None and smtppass is None` - **error**

It would be good to diagnose the errors rather than silently treat them as "don't use authentication":

    else if smtpuser is None and smtppass is None:
        self.smtpauth = False
    else:
        raise ValueError('smtpuser and smtppass must both be specified to use authentication!')

Alternately, the constructor could take a single `smtpauth` argument that is either `None` or `(user, pass)`.