Put function bodies under function signatures, instead of flat in the parent.

This will let us know the length of function bodies for the purpose of
inlining (among other uses).
diff --git a/builtin_function.cpp b/builtin_function.cpp
index 684a10c..f8ec38c 100644
--- a/builtin_function.cpp
+++ b/builtin_function.cpp
@@ -216,7 +216,7 @@
    ir_function_signature *const sig = new ir_function_signature(type);
    f->add_signature(sig);
 
-   ir_label *const label = new ir_label(name);
+   ir_label *const label = new ir_label(name, sig);
    instructions->push_tail(label);
    sig->definition = label;
    static const char *arg_names[] = {
@@ -234,16 +234,16 @@
 
       var = new ir_variable(type, arg_names[i]);
       var->mode = ir_var_in;
-      instructions->push_tail(var);
+      sig->body.push_tail(var);
       declarations[i] = var;
    }
 
    ir_variable *retval = new ir_variable(ret_type, "__retval");
-   instructions->push_tail(retval);
+   sig->body.push_tail(retval);
 
    declarations[16] = retval;
 
-   generate(instructions, declarations, type);
+   generate(&sig->body, declarations, type);
 }
 
 void