Use new interface 'SGP'

There is no need to create an concatenated buffer of 'password:domain'
since all we do is to feed the bytes 1:1 through Md5. This changes
'func hashPassword(out []byte, password []byte)' to
'func hashPassword(out []byte, pw_parts ...[]byte)' and reduces the
amount of allocations.

Additionally, we also allocate a new temporary buffer in 'hashPassword'
on each call, just to throw it away at the end of the function.

'SGP' defines an interface which allows to implement a new method (sha1
comes to mind, see supergenpass.com). 'SGPMd5' implements 'SGP', reduces
the amount of allocations
Remove unused code
Add Sha512 variant of supergenpass

This commit provides the Sha512-based variant of supergenpass. It adds
the -sha flag.
Use simple code to check password validity instead of RE

Instead of having a (quite complex) regular expression to check 3 things
in the generated password we use now a simple loop + some if-conditions.
This also reduces the risk of having traces of the checked passwords
somewhere in the regular expression code.

Additionally:

* Enforce a minimum password length
* Fix spelling in error messages
* Move tests