Make naming consistent. Gather common functionality into one library and
try to use it across all providers.
Introduce libtool-style versioning for libraries.
Note: Sorry for not splitting this humongous patch into parts, I just couldn't find a way that would logically fit.