Separate typing & pattern matching compilation

type:internal

This MR separated the type-checking & pattern matching compilation in pattern_matching.ml

This simplifies the pattern matching compilation flow, and lays some ground work for better cases analysis,

Follow up MR's:

  1. Missing case analysis after typing
  2. Rewrite product_rule
  3. Change ast types to differentiate between E_matching & E_case
  4. Have type_expression part of pattern from ast_typed onwards

Changelog details:

Edited by Melwyn Saldanha