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.
For the second parameter, you use List of Object for implList, in the code, you limit Object as String only. Then I would use List of String for implList as a strong type so that any error would be found at compile time rather than runtime through Parse() method.