counter_based_engine exports {domain,range,key}_type
start counter at 0, not 1
make the v=b(c) invariant more explicit and easier to reason about
*really* generate an overflow in test_counter_detail
move the overflow checking into its own TEST_CASE