Decide on the pattern factory API

This is actually pretty simple: it's just a way to create patterns.
Begin describing a pattern interface

The general idea is that patterns should take inputs and produce
outputs.  I'm not entirely sure how to represent the Chisel graph
produced by a pattern, though...