cabal builder: clean dist and other special files

Before, if we have a dist directory in a Haskell project that nix copies over to
the store, the cabal builder didn't properly rebuilt because all the
file modification dates were changed.

Now we filter the dist directory before we copy it to the store and also
run cabal clean prior to building. The clean is required in the case
were `src` isn't a path but a string, because filterSource refuses to
work in that case.

Fixes NixOS/nixpkgs#3112