Return edge from metaprogram::add_edge

Makes creating tests easier
Fix false comment in metaprogram::state_t
Add new test for metaprogram
Modify metaprogram::step() to not return is_finished()