runtime: Add pointer fast patch for symbol eqv

_lliby_symbol_is_eqv is intended to speed up symbol (eqv?) and (equal?)
by skipping the type checks in the general equivalence paths. However,
this also skipped the pointer equality fast path. Fix by adding a
pointer equality check directly in _lliby_symbol_is_eqv
runtime: Slightly simplify UTF-8 decoding

We don't need to mask out the header byte to determine how long its byte
sequence is, a direct range check is sufficient. This also lets us get
rid of the *ByteHeaderMask constants

On a modern desktop Intel processor this results in less code being
generated but doesn't affect execution speed. This is likely due to
there being enough integer units available to calculate the AND in time
for the next byte to be read from memory.
Optionally allow typing on all forms

Instead of having dedicated forms for typing such as (lambda:),
(define:), etc. allow optionally typed identifiers on the R7RS forms.
There should be no ambiguity between the typed and untyped syntax so
this doesn't impact R7RS compatibility.

- Have ParseFormals and ParseRecordTypeDefine accept both typed and
  untyped identifiers in the same primitive

- Instead of treating : as a literal in the frontend ensure the symbol
  resolves to Primitives.AnnotateStorageLocType. This makes the use of :
  hygenic and means the annotated forms won't be accessible unless : is
  imported from (llambda typed)

- Remove the special typed primitives for (define:), (define-values:),
  (define-record-type:), (lambda:) and (case-lambda:)

- Allow the same bound value to appear multiple times in a syntax
  pattern. This is needed to allow : to appear multiple times.

- Rename the ExtractLambdaSuite class name to match its filename

- Merge (let:), (let*:), (letrec*:), (letrec:), (let-values:) and
  (let*-values:) from (llambda typed) in to their (scheme base)
  versions. This isn't perfect as some of the forms won't allow mixing
  of typed and untyped identifiers in the same form. If this becomes and
  issue this be addressed separately

Closes #31
compiler: Remove scala-reflect dependency

This used to be required by parboiled2 due to a bug. This seems to be
resolved now.
Add lambda shorthand for (define-report-procedure)

An increasing proportion of the standard library is being implemented as
normal Scheme functions. However, the lack of lambda shorthand for
(define-report-procedure) made their definitions more awkward than they
needed to be.

This adds frontend support for (define-report-procedure) lambda
shorthand and converts the standard library over.
stdlib: Define (substring) as a report procedure

There is report proc planning for (substring) but it is a procedure
defined by R7RS. Use (define-r7rs) for consistency.