Add subtyping for vec_or_dict
Summary:
Adds the following subtyping rules, presented without contexts for brevity. Note that unlike in a type hint position, the *type* representing `vec_or_dict` always has two type parameters
```
int <: tk t <: tv
=============================
vec<t> <: vec_or_dict<tk, tv>
tk1 <: tk2 tv1 <: tv2
=======================================
dict<tk1, tv1> <: vec_or_dict<tk2, tv2>
// the following rules just mimic the behavior for varray_or_darray
tk1 <: tk2 tv1 <: tv2
======================================================
vec_or_dict<tk1, tv1> <: vec_or_dict <tk2, tv2>
<: KeyedTraversable <tk2, tv2>
<: Rx\KeyedTraversable<tk2, tv2>
<: KeyedContainer <tk2, tv2>
<: AnyArray <tk2, tv2>
tv1 <: tv2
============================================
vec_or_dict<_tk, tv1> <: Traversable <tv2>
<: Rx\Traversable<tv2>
<: Container <tv2>
```
Differential Revision:
D26333218
fbshipit-source-id:
4f1f40e28090173060a528142d88d69985e3f3e3