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.
It should be:
      } else if (c.setImplLists.containsKey(i)) {
        c.builder.b.bindList((Class) clazz, c.setImplLists.get(i));
      } 

It caused Reef tests failed. I have fixed it and merged the change. We should have tests in Tang to cover this senario.