destruct: First stab at #123 (WIP)

Only works when called on expression and uncomplete matches. Doesn't destruct
subpatterns yet.

Only bound in vim, emacs bindings will come later.

4.02 only.
destruct: Move to typed patterns generation (WIP)

Required to destruct subpatterns.
destruct: first "almost working" implementation

"Almost" because it works in the general case but only partially with GADTs and
not at all when called on function parameters.
For example:

    let f (x : 'a list) = ()

will be transformed into:

    let f ((([] as x) : 'a list) | _::_ : 'a list) = ()

which is broken.
destruct: don't reprint (and so, reformat) user code
destruct: backport to 401
destruct: commit forgotten files...

"oups"
destruct: fix compilation with 402
destruct: started backporting to 400 (WIP)

Doesn't compile yet, we don't have the same interface to [Env].
destruct: make it compile with 400, skipping Env problems for the moment
Backport changes on Env to 4.00.X: we now store "type_descriptions"

Required for "destruct".
destruct: now works with 400
vim: fix destruct binding + add :Destruct command
destruct: better printing of generated patterns
destruct: handle polymorphic variants
vim: minor bugfix for destruct
destruct: unpack modules in expression context
emacs: bind destruct
Fix destruct command in emacs
Use merlin-send-command instead of -async
Remove unecessary lexical-let