* build complex and indirected types into AACI
* break up coerce and coerce_step
coerce_step handles the looping and accumulation logic, whereas coerce
just handles one term, and returns {ok, _} or {error, _}. This way
coerce can become recursive, and even without recursion becomes easier
to read, due to fewer nested tuples.
Pretty insignificant change, but it'll be nice to have something to diff
off of more cleanly.
* coerce some more types
Still haven't covered lists or tuples, but these were enough to cover a
real contract that I want to test properly, once I have a node to test
on.
* process types from all contracts in ACI
This includes the contract itself, which is added as an alias for
`contract`. This way the ACI can describe and use contract interfaces,
and `ct_*` contracts can be passed into vanillae.
* coerce lists and tuples