implement command-level encryption (#77) and secure password storage (#21, #9)

add three new CLIENT commands
	GETPUBLICKEY
	SETSHAREDKEY
	GETSIGNEDMSG

and three new SERVER responses
	PUBLICKEY
	SHAREDKEY
	SIGNEDMSG

passwords for all newly registered accounts using a secure connection according
to the protocol below are now stored as HASH(PASSWORD + RANDSALT) where RANDSALT
is a 16-byte random string unique per user and HASH is SHA256

the encryption protocol works as follows
	1. client sends  GETPUBLICKEY
	2. server sends  PUBLICKEY ENCODE(RSA_PUB_KEY)
	3. client sends  SETSHAREDKEY ENCODE(ENCRYPT_RSA(AES_KEY, RSA_PUB_KEY))
	4. server sends  SHAREDKEY ACCEPTED  *or*  SHAREDKEY INVALID
	5. client sends  ENCODE(ENCRYPT_AES("COMMAND ARG1 ARG2 ...", HASH(AES_KEY)))
	6. server sends  ENCODE(ENCRYPT_AES("COMMAND RESPONSE1 ...", HASH(AES_KEY)))
	...

	iff a client performs (3) and receives SHAREDKEY ACCEPTED in (4), then
    ALL FURTHER PROTOCOL COMMUNICATION (C2S and S2C) SHALL BE SYMMETRICALLY
	ENCRYPTED USING THE SHARED KEY AND ENCODE(...)'D; any commands that are
	sent enencrypted by this client will be considered garbage and dropped!

	// these steps are OPTIONAL
	7. client sends  GETSIGNEDMSG ENCODE(MSG)
	8. server sends  SIGNEDMSG ENCODE(ENCRYPT_RSA(DECODE(MSG), RSA_PRI_KEY))

where
	HASH is the SHA256 algorithm again
	ENCODE and DECODE represent the usual base64 scheme
	AES_KEY is any non-empty string (16 bytes or longer) chosen by client
	RSA_PUB_KEY is the server's public RSA key
	ENCRYPT_RSA is the RSA asymmetric cipher
	ENCRYPT_AES is the AES256 symmetric cipher

it is STRONGLY RECOMMENDED that clients implement this protocol to eliminate
reverse password lookups, replay attacks, etcetera which are currently *all*
possible (and easy)
-
remove old comments
make user_data a default argument for SETSHAREDKEY
fix comments (referencing older commands)
refactor decryption out of Protocol::_handle and into Client
fix/reformat
let GETSIGNEDMSG sign the MOTD if user_data is empty
Client: handle batch-encrypted commands
SQLUsers: add stretching KDF to user DB authentication
fix some syntax errors
allow to enable encryption before login
fix/handle some more errors
fix
fix registering new user
fix handling of unicode strings
more verbose error
fix typo
extend verbosity
Protocol: add ACKSHAREDKEY