Decrease the size of the working buffer

This commit is essentially the port of an optimization I found for
[csgp][1]: to generate a password via Md5 we only need a Md5 hasher
and a working buffer of 24 bytes (base64.StdEncoding.EncodedLen(md5.Size)).
The 16 bytes for the raw Md5 digest are stored inside the 24 byte buffer
like this: [24......[16..............]]. This works because:

* The password parts end up directly as in the Md5 hasher (first round)
* The md5-state is copied over into the 16byte block
* The 16byte block gets base64-encoded. The b64-encoder chases the
  currently processed byte from the 16byte block but never catches
  up; except for the last round. In that round, any trace of the raw
  md5-state got erased by the base64-version of it:
           +--------+
       [aaaa.......[111.........]]
       [aaaabbbb...[111222......]]
       [aaaabbbbccc[c11222333...]]

* The 24byte buffer is then feed into a md5-state and
  the whole process repeats.

[1]: https://github.com/mgumz/csgp