the thing is, the normal of collision of a sphere will *always always always* be perpendicular to its surface. That means it will always be (the normalized value of) a point on its surface minus its center.
Finding circle<->circle collision is super easy (due to the property above). Circle<->oval collision is a bit harder. Circle<-> square is hard (especially if the square can rotate - then you have to worry about rotational velocity and moment of inertia). Circle <-> rectangle is kinda the same but a bit harder than circle<->square. And then if you have a bunch of squares overlayed on each other? That's even a bit more complicated.
Uhh, so I'd say you should either try box2d, use newton physics restricted to 2 axes (no concave shapes tho), or implement a system like this:
http://www.gamedev.net/reference/programming/features/verletPhys/default.asp (accurate looking physics, but don't mistake it for actual physics! It's just gamey shortcuts. Also the example code is in C++)
If you want to have only circle-circle collision *with* rotation, that's a lot easier. Something like I did in these two videos:
http://www.youtube.com/watch?v=28G7k0MTfxg
http://www.youtube.com/watch?v=cQ1n1-ls2CQ&t=2m8s
would work.
The source code for the first video has been uploaded (its in c++), and I'll get the source uploaded for the second vid (its in java).
[edit]
but box2d would really be the best option unless you really don't want to spend