Initial work on removing major assumptions.

- Added a parent interface ICurrencyParameters that is intended to
encapsulate everything needed to define a different currency.
--- Has an IChainParameters member that encapsulates the chain-specific
values.  The ultimate goals for this one is that it encapsulates the
fundamental defining characteristics of a currency's blockchain, so a
change to any member will technically result in a hard-fork.
--- Has an INetworkParameters member that encapsulates the values needed
to be able to communicate with other nodes.  Analogous to
IChainParameters, but rather than resulting in a hard-fork, the intent
is that differences in these values cause a different protocol.
--- Has the genesis block.  I wasn't originally going to do this, but
since everything seems to assume that every node agrees on the genesis
block and thus doesn't send it along, this simplifies things a lot.  As
far as shortcuts go, this is a very palatable one for me right now.
--- Has the IHashAlgorithmStore that contains all the hash algorithms to
use.
- Network parameters now only expose the checksum hash algorithm
identifier, not the hash algorithm itself.
- Renaming OP_RIPEMD160 and related opcodes to OP_HASHALGORITHM1 thru 5,
per IChainParameters.
--- Basically, this allows people to pick different hash algorithms to
use for ITransactionScriptRunner without having to implement special
handlers.