Basically, a heavy ball is any ball that pounds into your racket with unexpected force.
Normally, it is (as mentioned above) a compination of speed and spin. The ball seems to leap into the strings, almost knocking the racket back.
But you can also have a relatively "flat" ball that comes across as heavy. Don Budge (from the 30s/40s) is mentioned as having one of the "heaviest" backhands, ever- and it was fairly flat. It just had a lot of speed and power behind it.
Which brings us to the psychological factor. When a ball leaves the opponent's racket, we get an impression of what to expect, and we prepare accordingly. Sometimes we are quite surprised. We see a smooth unspectacular stroke and prepare to return an average ball-- but the racket jars in our hand.
That brings us back to the defination-- any ball that pounds into our racket with unexpected force.