Is there a built-in function to map a list of heads to a list of data?

Update

Well I guess I should retire for the evening to a less brain-intensive activity as apparently I can't think clearly. One could of course use Outer:

Outer[Compose, {f, g}, {a, b, c}]
{{f[a], f[b], f[c]}, {g[a], g[b], g[c]}}

However I recommend that you do not do this as you will not gain the auto-compilation of Map, meaning this method will often be slower. Please see Leonid's explanation of this issue.

Old, half-awake answer

As far as I can remember there is no function that does specifically this in one step. I have used a more terse version of your own solution myself:

myMap[fns_, data_] := # /@ data & /@ fns

myMap[{f, g}, {a, b, c}]
{{f[a], f[b], f[c]}, {g[a], g[b], g[c]}}

There are of course many alternatives, e.g.:

Thread /@ Through[{f, g}[{a, b, c}]]
{{f[a], f[b], f[c]}, {g[a], g[b], g[c]}}

However this inferior because it first evaluates to:

{f[{a, b, c}], g[{a, b, c}]}

Which means that f and g may evaluate before the operation is complete. One could add an Unevaluated, Hold, Inactive etc., but that seems like pointless complexity.

Just for fun we could make use of the operator form of Map in version 10:

Through[(Map /@ {f, g})[{a, b, c}]]
{{f[a], f[b], f[c]}, {g[a], g[b], g[c]}}

I don't think there's any built-in function to do this, but here is an alternative:

myFunc[func_, data_] := Transpose[Through[func[#]] & /@ data]

Then

myFunc[{f, g, h}, {a, b, c}]

{{f[a], f[b], f[c]}, {g[a], g[b], g[c]}, {h[a], h[b], h[c]}}


Outer[#1 @ #2 &, {f, g}, {a, b, c}] or Outer[Construct, {f, g}, {a, b, c}] can do.