Tighten up the definition of List.cons

Use the same generic type specifier U as other methods do
Fully qualify the type of the object being returned, to disambiguate
between :: the method and :: the case class.
Add List.concatenate

Like cons, concatenation is polymorphic. The result type is "widened" as
necessary to include the types of all list elements. Note also that
again the order of the arguments is swapped between an infix operation
and an explicit method call. Because both ::: and :: end in a colon,
they both bind to the right and are both right associative.

For instance, the else part of the definition of ::: shown here contains
infix operations of both :: and :::. These infix operations can be
expanded to equivalent method calls as follows:

  prefix.head :: prefix.tail ::: this

    equals (because :: and ::: are right-associative)

  prefix.head :: (prefix.tail ::: this)

    equals (because :: binds to the right)

  (prefix.tail ::: this).::(prefix.head)

    equals (because ::: binds to the right)

  this.:::(prefix.tail).::(prefix.head)