Re-use prepared statement in executemany()

Previously we were calling execute() for each parameter set. Now we
create the prepared statement once, and re-use it for each parameter
set. In the test in performance.py this gives a 40% speed up.

We're still calling convert_paramstyle for each parameter set, so I
think there may be some further optimization we can do there.