build from properties, rather than definitions

closes #20 (should have same/similar effect, but a bit simpler and with passing tests)