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.
Second parameter can be either List of String or List of Class(which extends from T), so we cannot fix List type to String(or Class). I tried to separate these methods into two, one for List of String and List of Class like the following, but I failed because Java considers two methods have same parameter types.

`public void bindList(NamedParameterNode> iface, List<Class<? extends T>> implList)`
`public void bindList(NamedParameterNode> iface, List<String> implList)`

Same for methods in ConfigurationBuilder.
Thanks.