Implement execution in LocalBlockChain
This implements a depth first execution of chain actions with support for deploying contracts from contracts and calling into other contracts recursively. To support these things, contracts need to exhibit a bijection of their types from and to OakValue. This machinery is modeled with type classes. Then, use this to avoid having to store strongly typed contracts anywhere; instead, a contract can be converted to a WeakContract instance (using a coercion). The WeakContract verifies that messages and states serialize/deserialize correctly and then passes everything along to the strongly typed contract under the hood.