Split the cabal_macros.h generation into a helper and wrapper

Makes it easier to reuse this code in other contexts, for example if we
want to build without a .cabal file using all the packages in the
environment.
Merge pull request #1399 from dcoutts/cabal_macros.h-util

Split the cabal_macros.h generation into a helper and wrapper