Add 'Rec' construct for recursive protocols

Meaning that they can be evaluated at compile time without need for an
assert_total, as long as they are properly constructor guarded (and it'd
be surprising if not since protocols are just described in an AST...)