Set of downcasting matching macros akin to what Scala's match or Haskell's case can do. Useful in actor models etc.

``` let a = Box::new(5i32) as Box; let b = matchdowncast(a, { x: i32 => x y: f32 => x as i32, z: () => -1, _ => panic!() });

assert_eq!(b, 5); ```