Add support for committing large specialised programs as a number of different functions, and fix a couple of bugs that were exposed as a consequence.

Also forward pointers and FDs whose def-use edges are broken through globals, a solution which applies to vararg functions too.