Dropping objects and groups with varying sizes and rotation to a floor with Python
I don't know much about Python scripting so I can't help with that part but this may help you with the workflow and concepts, then you maybe able to extrapolate hot to automate this.

Group Instances are generally created from Empty type of objects, but it doesn't have to be so, Dupligroups are the underlying feature that makes group instancing possible, and can in fact be used on any object type.

You can for example use a mesh as duplicator for a random group consisting of many other objects. It will override the "renderable geometry" of the object and replace it whatever group is being duplicated.

It also has the added benefite of allowing using physics on object types that would not support them otherwise like Bezier Curves, by assigning them to the duplicating mesh instead.

Just create any mesh object shaped as desired. If you care about detailed collision physics for complex geometries, make it so the mesh is shaped roughly as a simplified bounding volume of the group it will contain.

Add the desired curves to a new group (don't forget to set up group center, sanely placed relative to the object positions), then pick that group as Dupligroup for the previously created mesh.

You can now assign any physics desired to the mesh, virtualy looking like they are applied to the group instead.



Have in mind that in this case I made a randomly shaped mesh that has nothing to do with the underlying group shape, ideally they would roughly match.