Part of this was rotten, and not fully functional. This fixes the rot, adds some tests, and improves the type checking that occurs when sending and receiving values. In addition, a significant portion of this happens at compile time. There is still more work to be done here, but this should get us a good chunk of the way for now.