Added the ability to alter the algorithm when subclassing classes which
are most likely to need to interact with data from another system:
Crypto, DigitalSignature, HashMac and KeyExchange. These now have
protected constructors that take an algorithm parameter.