The only thing I'll add is to mind the voltage tolerance: 4.2V is the safe limit but the absolute max is 4.25V (a little over +1%), so you'll need to make sure your equipment can achieve that accuracy otherwise you could be overcharging and not know it. As mentioned above, there's always the option of going slightly lower.
Yep, so even LM317I set to 4.14V should be fine with load regulation <100mV when Vo is <5V for those small currents needed for charging
http://www.fairchildsemi.com/datasheets/LM/LM317.pdfThere is one more thing when charging batteries-how temperature changes those maximum battery charge voltage, so what can be temperature compensation level for those small Li-on if needed?
I use 12V car starter battery and LM350 which is overkill for currents <0.5A with small radiator for short cell phone calls/standby where output voltage is 4.14V to let think crappy phone think it has fully charged Li-on


LM350A has typical load line regulation 0.3% (1%max) , LM350 1.5%max, so it looks like ~60mAmax<100mA and 4.14V with two simple resistors should be fine while we need disconnect charger at low temperatures as well as do not want charge out batteries at high ambient temperatures, but will use it in room temperatures, so about 25*C max .
http://www.ti.com/lit/ds/symlink/lm350-n.pdfLM317I is cheaper and for small charging current with bigger radiator should be fine if we add automatic current limit control, so DIP8 AVR MPU will let us write a few lines of code and implement this simply charging logic mentioned above and no lab PSU needed to charge bloody small Li-on, because of npbody will manually set those current limits based on battery voltage and current readings

while MPU will do it 10000 times per second for us

Of course I will not leave this simply charger even with copper pipe heatsink and flammable Li-on in place where serious fire could happen, but do the same with "commercial" chargers for safety reasons

NOTE: There are caps on bottom side of this 1inch2 single layer PCB
