Typed Funcs

This PR adds a template version of Func, FuncT<T>. This allows the user to define a Func that returns FuncRefExpr/FuncVarExpr that implicitly convert to T instead of Expr. This way, users can define operator overloads and other useful functions for their type. To test/demonstrate the feature, I updated the FFT test to use a complex number type with the appropriate operator overloads. 

I expect this change to be controversial and I'm not completely sure we should merge it (at least I expect we might want to make some big changes). Any thoughts/improvements very welcome! In particular, if you find a way to make operator overloading work without the forwarding monstrosity in Func.h, I'd love to see it.
I'm not sure I completely agree with this statement. What does providing a derived class called Vector give us other than the semantic name "Vector"? 

The approach I've adopted to this is to differentiate the Vector accessor from the Matrix accessor by using operator[] for Vectors, a la Eigen.

I would suggest that this become:

```
Expr &operator[] (int i) {
  assert((M == 1 && 0 <= i && i <= N) ||
         (N == 1 && 0 <= i && i <= M))
  return m[i];
}
```

That way we can handle both row and column vectors.