Snap object on top of surface of other object
Use Blender's snapping feature with Snap Element set to Face. The configuration group is right on the 3D View's header.

If you activate Snap during Transform (Shift + Tab or the magnet button), you don't have to hold Ctrl while grabbing the object.

You can also Align rotation with Snapping Target (2nd button from the right) so the snapped object aligns its orientation with the face's normal.



It's possible to snap the lower (-Z) part of an object to another's surface, by placing the object above its intended target. It seems snapping uses the nearest point of grabbed object, and its relative position to target before transformation. I get these inconsistent snapping positions if the object's moved from above the target, and need manual adjustment to keep it outside the surface: