Generalize FunctionalQueue.enqueue by making it polymorphic.

We make it polymorphic by giving the enqueue method itself a type parameter
and using a lower bound for its type parameter.

The new definition gives enqueue a type parameter U, and with the
syntax, "U >: T", defines T as the lower bound for U. As a result, U is
required to be a supertype of T. The parameter to enqueue is now of
type U instead of type T, and the return value of the method is now
Queue[U] instead of Queue[T].

As an example, suppose there is a class Fruit with two subclasses, Apple
and Orange. With the new definition of class Queue, it is possible to
append an Orange to a Queue[Apple]. The result will be a Queue[Fruit].
This revised definition of enqueue is type correct. Intuitively, if T is
a more specific type than expected (for example, Apple instead of
Fruit), a call to enqueue will still work, because U (Fruit) will still
be a supertype of T (Apple).