compiler: Avoid unioning identical types

SchemeType.+ was unconditionally unioning the two passed types together.
This is semantically harmless but it will unroll recursive unions even
if they're the same type. This causes it to produce ugly types for
proper lists if they're ever unioned together

Instead, short circuit + to just return "this" if both types are
identical.
stdlib: Initial (llamda list) implementation

This implements the following procedures from SRFI-1: (filter),
(remove), (find), (find-tail), (take-while), (drop-while).

These are implemented as polymorphic Scheme procedures in a new (llambda
list) library. There's an internal (cond-map-head) macro that implements
the core list iteration logic that's reused for each procedure.
stdlib: Prefix C++ static library names

This is in preparation for implementing library functionality outside of
R7RS in C++

- Move all of runtime/stdlib/ in to runtime/stdlib/scheme. This
  corresponds with the library names in Scheme, e.g. (scheme write) is
  inside runtime/stdlib/scheme/write/

- Prefix the standard libraries except llcore.a with ll_scheme_. For
  example, llwrite becomes ll_scheme_write
stdlib: Implement (cons*)

This is identical to the procedure defined in SRFI-1