This patch isn't yet ready for merging, but I think is ready for high-level review. Note that it assumes something like [this](https://gist.github.com/asb/b8701efe35cf99bc8fd606b9ca984337) has been merged into D122215.
* funcref support and test coverage
* Semantic restrictions and test coverage for C++
WebAssembly tables are modeled at the IR level as arrays in address space 1. As the instructions accessing tables take the table index as an immediate, use of tables is very restricted (i.e. it isn't possible to pass as an argument etc). This patch models tables in C as arrays of reference types and adds various semantic restrictions to avoid illegal uses. Some of these restrictions overlap with those for sizeless types, while of course the limitations on passing in parameters and so on go above and beyond that.
I'd really appreciate any high-level feedback / questions / concerns about this approach at this point.