Support list bindings in Tang #187

Support list bindings in Tang #187 

Hi, I'm Gyewon Lee and an undergraduate student in SNU CMSLab.

Currently, Tang can bind collections of values(or instances) by binding sets but it does not guarantee orders of the elements. In this PR, I've implemented 'bindList' API, which gives a way to injecting order-preserving lists to a target instance.

You should provide a whole list(whose elements can be Class or String), not an element when binding a list. List binding should be commutative, so it can not be merged or bound multiple times like set binding. Discussions we had in REEF Discussion group and detailed design document can be found in the link below.
https://groups.google.com/forum/#!topic/reef-discussion/IFNpLkQULBU

I've implemented the following features

* Support list binding by ConfigurationBuilder and ConfigurationModule
* Serialization of list bindings by using Apache Avro
* Pre-checking of list(or set) elements' assignability and parsability in configuration time
* Fix some bugs and typos

I added a new boolean field, 'isList' at NamedParameterNode so protobuf's message type has also changed. Because of that currently it does not pass the tests related to protobuf.

Thanks.
Because list's elements can be string value or class implementation, their type will be java String or Class, not T. To make types more tighter, I'll separate 'bindList' method into two, one for list of Strings and the other for list of Classes.

It'll make injecting list with both classes and strings impossible, but I think it will be very rare.

Thanks.