Some small fixes not dependent on mixed-space

* Only flatten Args on VectorFunctionSpaces
* Use make_dat to create Dat on a FunctionSpace
* Return None for op2.Halo if sends and receives are empty