How to make keyframes in Blender 2.78a using Python?
Finally I found a solution which works great for me.
I added some commits so others with the same starter problems can use it.

Remember: there must be an named object defined in originName, otherwise the script will crash!

import bpy, math, random


d           = 4           # size of area where the balls spawn (STRG+Q to see what I mean)
anz         = 100           # number of balls
frameAnz    = 100           # number of generated frames
spawnScale = [0.015 , 0.09] # range for random scale during spawnprocess of a new ball
originName = "motherBall"   # name of the origin-object

#prepare scene, keyframes and keyframe-pointer:
scene = bpy.context.scene
scene.frame_start = 0
scene.frame_end   = frameAnz
bpy.ops.screen.frame_jump(end=False)

# first remove all objects from previous script-runs:
# (better than "a", then "x" and then ENTER before restarting this script!)
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()

# "pick" the original ball from layer 1:
oBall = bpy.data.objects[originName]  

# loop for creating (anz)x balls:
for anz in range (0,anz):

    # duplicate the original ball and
    # name the new ball like "zz_Ball-00001"  
    # zz_ is for standing below in the outliner
    newBall = oBall.copy()
    newBallName = str(anz).zfill(5)
    newBallName = "zz_Ball-" + newBallName
    newBall.name = newBallName

    # now generate a random position for the new ball:
    xpos = -1 * (d/2) + random.randint(0,(d-1))
    xpos += random.random()
    ypos = -1 * (d/2) + random.randint(0,(d-1))
    ypos += random.random()
    zpos =  random.randint(0,(d-1))
    zpos += random.random()
    # and place the new ball at this:
    newBall.location = (xpos, ypos, zpos)

    # scaling the new ball to get different sizes of balls:
    sz = random.uniform(spawnScale[0] , spawnScale[1])
    newBall.scale = (sz,sz,sz)

    #finally deselect the ball and link it into the scene:
    newBall.select = False
    scene.objects.link(newBall)

# now lets create frame by frame:
for actFrame in range(1,frameAnz + 1):

    bpy.context.scene.frame_set(actFrame)
    for ob in scene.objects:

        if (ob.name != originName):
            ploc = ob.location
            xpos = ploc[0]
            ypos = ploc[1]
            zpos = ploc[2]

            zpos = zpos + ( random.random() / 8)
            ob.location = (xpos, ypos, zpos)
            ob.keyframe_insert(data_path="location", index=-1)

# job done: now reset the framekeypointer to 0    
bpy.ops.screen.frame_jump(end=False)