I'm now recommending a sequential impulse algorithm over the PGS algorithm. While these two algorithms give similar results, it is conceptually simpler to implement sequential impulses.
Download slides and code here:
Within the slides, I show how to include weight feeling friction. Also, deltaT is not needed for the impulse calculations.
Caveat: If you don't plan to allow penetration, you must at least have a slop region. Otherwise you will end up cutting your time-step extremely small. My opinion is that CCD should be used to prevent tunneling, but should not be used for objects that are already touching.
You can achieve restitution by simply augmenting the bias velocity (mentioned in the slides) with a restitution term.
Now if you really want an accurate simulation you will have to implement an O(n^3)+ LCP solver (see Mihai Anitescu's work). If you can use the normal force from the previous step for friction, you might consider using a conjugate gradient algorithm like GPCG, which is O(n)+.