Rewrite demo assignment

This is a proposed implementation of the assignment layout discussed in #67 .

Resolves #67 
I can change the demo to do something more realistic with the teardown. For example, when we test for abstraction violations, we generally do `module.adt = new_adt` in the test, and use the teardown to switch `module.adt` back to its original implementation.

In terms of testing, what exactly did you have in mind in addition to unittests?