Allow arbitrary splat destructuring for dynamic
Summary:
I made a choice when writing Tdestructure that `dynamic` should splat like a vec, meaning that the function is required to have a variadic parameter to accept an arbitrary length array.
However, now that we are actively replacing parameter types with dynamic, a tuple can become dynamic and then a previously correct splat will fail on the dynamic pass. This changes dynamic to splat like a tuple under sound dynamic.
```
function f(~arraykey $i, ~arraykey $s): void {}
f(...tuple(1,"a")); // ok
f(...vec[1,"a"]); // bad
f(...$dynamic); // bad => ok
```
Reviewed By: francesco-zappa-nardelli
Differential Revision:
D35407749
fbshipit-source-id:
e5f31760ead511aed3c4e27ae0ec0a1e03ee5abf