Optimize MAP NIL.

Transform %map nil into %map-for-effect-arity-1 if the type of
sequence is not known. SOME and EVERY are optimized too as a result of
this.
Optimize MAP for unknown types.

Pick up some simple types like list and simple-vector without going
through subtypep. Avoid consing sequences together when possible.
Fix immediate encoding in SET-UNWIND-PROTECT on ARM.

Reported by David O'Toole.
Fix a regression in MAP-INTO.

A change in the %MAP transform also required a change in
BUILD-SEQUENCE-ITERATOR, but it wasn't the only place where it was
used.

Spotted by David O'Toole, tracked down by Bart Botta.
make-genesis-2.sh: read output/build-config.
Type system: contains-unknown-type also walks down negation types

Low occurrence, but negated unknown types can have pretty far-ranging
effects (e.g., `(and vector (not foo)), where 'foo is eventually
'vector).
typep: arrays test on wild _specialised_ element type

It currently works because unknown element types are disregarded, but
we'll eventually want to have a real type on the element type, and
some set representation for specialised element types.
New function: %upgraded-array-element-type to upgrade ctypes

Much saner than mutating an array ctype to upgrade it, and then
reading the specialised element type.
Type system: fix array type intersection and unparsing

1. We need to intersect specialised element types, not just re-derive
   it from the element type.  This only affects intersections between
   unspecialised array types and T arrays.

2. Be more careful when unparsing array types: we can intersect array
   element types for relatively wide specialised element types.  We
   must always preserve the specialised element type.

3. Smoke regression tests.# Please enter the commit message for your changes. Lines starting
Really fix SVREF with unknown types

Now that array type intersection are correct (less broken?), the
kludge in bd84e72bb655e77c0c0bfeaec1c8eac7a427507b isn't useful
anymore.
Type/compiler: new utility functions to compute over types

sb!kernel:generic-abstract-type-function approximates a function over
types given an arbitrary finite set representation.

sb!kernel:list-abstract-type-function specialises on the standard
CL list representation of finite sets.

See late-type.lisp for documentation.
More aggressive ARRAY-RANK type derivation

* Use list-abstract-type-function to derive possible values for
  ARRAY-RANK even in the face of union/intersection/negation types.

* Fixes lp#1310574 (triggered by a prior fix to array type union).

* Plus tests derived from opticl.
Missing a clause in ECASE in %DEFINE-SYMBOL-MACRO
Fix discrepancy in how MACROEXPAND-1 calls the expander for symbols.
INFO :SETF :EXPANDER/:INVERSE can't both return T as their second value.

Setting an INFO to NIL was a technique that made some degree of sense
when the globaldb didn't allow clearing, but clearing is more sensible.

The unrelated QUIETLY-ASSIGN-SETF-MACRO function will be used
in a subsequent change.
Make fewer special references to *BYTE-BUFFER*
Eliminate most bootstrap warnings and make #+sb-show less noisy.

The number of lines of /show output to wade through before saving
of sbcl.core is down to about 197K.
The kludge in DEFUN WARN can soon be removed, perhaps already.
Unbreak build with n-fixnum-tag-bits > 1 on x86-64
Wrap PCL compile in a compilation unit
Tweak array-rank-vop on x86-64