Make data buffer sizes constant again.

Not sure why I thought having these buffer sizes a multiple of the
algorithm block size.  Seemed like a good idea at the time?  Basically
it makes program behavior (number of iterations through the processing
loop) dependent on the algorithm in use.  I'd rather this be determined
by the input size.  Likely this is just my preference.
Rename crypt_buf -> out_buf and data_buf -> in_buf.

Just trying to make this more legible.  in_buf is where we put data
read from stdin / user, out_buf is where we put data we're going
to write to stdout / user.
Replace 'encrypt' and 'decrypt' functions by moving the duplicative code in each into the work loop and using a callback for the update and finalize functions.

These two functions were 99% the same with a few variable names
and the two EVP calls being the only difference.  Since the calls
to the EVP API have the same signature we can move the common code
out into the work loop and declare function pointers for the
EVP_(Encrypt|Decrypt)(Update|Finalize) functions instead.
Use another function pointer for initialization since encrypt / decrypt have different initialization routines (duh).
Use _ex variant of Final functions to do clean-up for us.
Lotsa 'verbose' output clean up.  Make a global flag for verbose state.  Stop passing args to every function to get at verbose state.