Bug 7458: Implement discriminator engine node entry points

* sources/dfmc/modeling/namespaces.dylan
  (&module dispatch-engine): Export %gf-dispatch-linear-by-class.

* sources/dfmc/modeling/functions.dylan
  (discriminator$m-restp): Uncomment definition.

* sources/dfmc/modeling/modeling-library.dylan
  (module dfmc-modeling): Export properties$m-entry-type,
   properties$v-entry-type, discriminator$v-argnum, discriminator$s-argnum,
   discriminator$m-argnum, discriminator$v-nrequired, discriminator$s-nrequired,
   discriminator$m-nrequired, discriminator$m-restp,
   $engine-node-entry-point-names, and $engine-node-callback-names.

* sources/dfmc/llvm-back-end/llvm-entry-points.dylan
  (entry-point discriminate-on-argument): New discriminator entry point.
  (entry-point if-type-discriminator): New discriminator entry point.
  (entry-point typecheck-discriminator): New discriminator entry point.
  (entry-point monomorphic-by-class-discriminator): New discriminator entry
   point.

* sources/dfmc/llvm-back-end/llvm-primitives-lambda.dylan
  (primitive primitive-initialize-discriminator): Implement a selection
   branch tree to choose the correct entry point for a discriminator engine node.

* sources/app/llvm-runtime-generator/llvm-runtime-generator.dylan
  ($runtime-referenced-objects): Add $absent-engine-node and
   $inapplicable-engine-node to the set of referenced objects.
Bug 7440: Fix ins--if case with no successors

* sources/lib/llvm/llvm-builder.dylan
  (do-ins--if): Don't insert a continuation block if control does not reach
   the end of either branch.

* sources/lib/llvm/tests/llvm-builder-test.dylan
  (macro-test ins--if-test): Test the case where control does not reach
   the end of either branch.
Bug 7458: Constant versions of tagging routines

* sources/dfmc/llvm-back-end/llvm-ops.dylan
  (op--tag-integer on <abstract-integer>): New method to construct a constant
   tagged representation of an <integer>.
  (op--tag-character on <llvm-value>): New method to tag a value as a character.
  (op--tag-character on <character>): New method to construct a constant
   tagged representation of a <character>.

* sources/dfmc/llvm-back-end/llvm-emit-object.dylan
  (emit-object on <abstract-integer>): Define using op--tag-integer.
  (emit-object on <character>): Define using op--tag-character.
Bug 7458: Implement entry points for terminal engine nodes

* sources/dfmc/modeling/functions.dylan
  ($engine-node-entry-point-names): The entry point for
   <ambiguous-methods-engine-node> is general-engine-node-spread rather than
   a separate ambiguous-methods entry point.
  (slotdiscrim$v-offset): Un-comment definition.

* sources/dfmc/modeling/modeling-library.dylan
  (module defmc-modeling): Export smen$v-nrequired, smen$s-nrequired,
   smen$m-nrequired, smen$v-restp, smen$m-restp, and slotdiscrim$v-offset.

* sources/dfmc/modeling/namespaces.dylan
  (&module dispatch-engine): Export %gf-dispatch-boxed-class-slot-getter
   and %gf-dispatch-boxed-class-slot-setter.

* sources/dfmc/llvm-back-end/llvm-entry-points.dylan
  (op--invalid-keyword-trap): New utility method for emitting
   a call to the invalid-keyword-trap routine in the dylan library.
  (op--engine-node-callback): New utility method for emitting the retrieval of
   the callback function pointer from an <engine-node> instance.
  (op--parent-gf): New utility method for emitting code to find the
   <generic-function> corresponding to a <dispatch-starter>.
  (entry-point general-engine-node-n, entry-point general-engine-node-1,
   entry-point general-engine-node-2, entry-point general-engine-node-3,
   entry-point general-engine-node-spread, entry-point single-method,
   entry-point implicit-keyed-single-method,
   entry-point explicit-keyed-single-method,
   entry-point unrestricted-keyed-single-method,
   entry-point cache-header, entry-point profiling-cache-header,
   entry-point boxed-instance-slot-getter,
   entry-point boxed-instance-slot-setter,
   entry-point boxed-repeated-instance-slot-getter,
   entry-point boxed-repeated-instance-slot-setter,
   entry-point raw-byte-repeated-instance-slot-getter,
   entry-point raw-byte-repeated-instance-slot-setter): New <engine-node>
   entry points.
  (op--reconstruct-args-from-mepargs): New utility method for emitting
   code to merge together a complete argument list from the required arguments
   and optionals vector passed in varargs.
  ($null-object-pointer): New constant.
  (op--verify-keywords): New utility method to emit code to validate keywords
   passed in an optionals vector against either a vector of keywords, or
   a keyword-specifiers vector of keyword and default value pairs.
  (op--slot-access-engine-node-offset): New utility method to emit the retrieval
   of the properties slot of a <slot-access-engine-node>.
  (entry-point discriminate-on-argument): Refactor implementation to use
   op--engine-node-callback.

* sources/dfmc/llvm-back-end/llvm-primitives-lambda.dylan
  (primitive primitive-initialize-engine-node): Implement generation of
   jump tables for the non-discriminator engine node entry points.
  (op--initialize-single-method-engine-node): New method for generating
   code to initialize a <single-method-engine-node> entry points.
  ($signature-number-required-mask, $signature-key-p-mask,
   $signature-rest-p-mask, $signature-optionals-p-mask): New constants.
  (op--initialize-cache-header-engine-node): New method for generating
   code to initialize a <cache-header-engine-node> entry points.

* sources/app/llvm-runtime-generator/llvm-runtime-generator.dylan
  ($runtime-referenced-objects): Add references to odd-keyword-arguments-error,
   invalid-keyword-trap, unbound-instance-slot, unbound-repeated-slot,
   repeated-slot-getter-index-out-of-range-trap, and
   repeated-slot-setter-index-out-of-range-trap for use by engine node entry
   points.
Bug 7458: Mark primitive-bef-values as auxiliary

* sources/dfmc/llvm-back-end/llvm-mv.dylan
  (primitive primitive-bef-values): Mark as auxiliary.
Bug 7458: Fix return types of symbol primitives

* sources/dfmc/llvm-back-end/llvm-primitives-symbol.dylan
  (op--register-symbol): Remove casts.
  (primitive primitive-resolve-symbol): Remove mapped attribute, and add
   explicit casts.
  (primitive primitive-resolve-symbol): Remove unneeded casts.
  (primitive primitive-string-as-symbol): Remove unneeded casts.
Bug 7458: Add a placeholder for class-allocation-break

* sources/dfmc/llvm-back-end/llvm-primitives-debug.dylan
  (class-allocation-break): Add placeholder primitive definition.
Bug 7458: Add keyboard-break runtime variable definitions

* sources/dfmc/llvm-back-end/llvm-primitives-os.dylan
  (dylan-keyboard-interrupt?): New runtime-variable.
  (dylan-keyboard-break-handler): New runtime-variable.
Bug 7458: Define call-dylan-function primitive

* sources/dfmc/llvm-back-end/llvm-primitives-lambda.dylan
  (call-dylan-function): Add new auxiliary primitive for invoking
   Dylan <function> objects from C.
Bug 7458: Streamline entry point generation

In the process, increase the maximum count from 9 to 16.

* sources/dfmc/llvm-back-end/llvm-primitives-lambda.dylan
  ($entry-point-argument-count): New constant governing the number of
   entry point variants generated.
  (op--initialize-single-method-engine-node,
   op--initialize-cache-header-engine-node): Use $entry-point-argument-count.
  (primitive primitive-initialize-discriminator): Use
   $entry-point-argument-count.

* sources/dfmc/llvm-back-end/llvm-back-end-library.dylan
  (module dfmc-llvm-back-end): Export $entry-point-argument-count.

* sources/app/llvm-runtime-generator/llvm-runtime-generator.dylan
  (generate-runtime-entry-points): Use $entry-point-argument-count.
Bug 7458: Implement primitive-set-generic-function-entrypoints

* sources/dfmc/llvm-back-end/llvm-primitives-lambda.dylan
  (primitive-set-generic-function-entrypoints): Fill in implementation.
Bug 7458: Implement primitive-engine-node-apply-with-optionals

* sources/dfmc/llvm-back-end/llvm-primitives-lambda.dylan
  (primitive-engine-node-apply-with-optionals): Fill in implementation.
Bug 7458: Snapshot