* I changed the grammar by moving the NOT NULL to the column options, and removing the IsNotNull production. It wasn't nice that "NOT NULL DEFAULT 0" was not accepted, which it is with the new representation.
* The tuple that's returned is natively a TupleTableSlot inside the table builder, not directly a HeapTuple. That stuff was ugly and wasn't using the proper abstraction anyway.
* I changed the signatures of the methods so that they receive TableExprState, and restructured the "opaque" data to be inside TableExprState. Now we don't need to have things such as the tupdesc or the input functions be repeated in the opaque struct. Instead they belong to the TableExprState and the methods can read them from there.
I managed to break the case with no COLUMNS. Probably related to the tupdesc changes. It now crashes the regression test. Too tired to debug now; care to take a look? The other stuff seems to run fine, though of course the regression test crashes in the middle, so perhaps there are other problems.
I fixed two issues.
1. there are not columns data when there are not any explicit column - fixed