Rewrite List as vector.

List was linked list. While some operations, such as pushing
an object to the head of the list, are very fast on the linked
list, it's generally slower than the vector, because it involves
many pointer operations.

The implementation of the vector is simpler than the linked list.

This patch changes the internal representation of List. The
external APIs are kept compatible. I'll rename List Vector in a
follow up patch.
Rename List -> Vector.