Task #1778 : Containment support to webapi.odata

1. Able to build an Edm model has a contained navigation property, using
convention model builder
  Add a [Contained] attribute to mark a navigation property as containment.
2. Able to build a model has a contained navigation property, using model
builder
  EntityTypeConfiguration<T>: ContainsMany, ContainsRequired,
ContainsOptional
  These, and existing HasMany etc. can be used to override convention model
builder.
3. Able to build a model with a base type has a contained navigation
property, and the navigation property is inherited by a derived type,
using model builder and convention model builder.
4. Able to route for fundamental scenarios
  ../MyOrders(orderId)/OrdersLines
  ../MyOrders(orderId)/OrdersLines(lineId)
5. Able to serialize / des-serialize containment
6. Containment in expand
7. Calculate links via ODL
  In derived scenario, when generate ID link (should be a Uri as per spec,
instead of string,) we should not append type cast at the end.
  Previously, when webapi.odata generates an Id link, it will check if a
derived type has a nav prop, if yes, it will append a type cast (even if
the actual type is the same to the request one.)
  After we leverage ODL for edit link generation, the edit link will be:
./service_root/es(key)/cast/cast
  As per v4 spec, the editlink/readlink does include the type-cast; however,
according to convention the Id does NOT include the type-cast:
8. Fix test cases about editLink
9. Verify containment after composable function / action