SI-8042 Use Serialization Proxy Pattern in List - address code reveiw

 - Use the SerializationProxy for both :: and Nil to reduce
   the number of special cases.
 _ Add comments explaining the pattern
 - Change deserialization to use List.newBuilder so that the
   deserialization code here uses the most efficient process
   available.  At this time, List.newBuilder is a ListBuffer which
   uses mutation, but the builder may change in the future.