I have a working prototype of an Arduino based charger running now.
It's pretty simple. Just two cells of LiMn to test for now, the Arduino pulls power from the 2 cells, about 30-100 mA right now, but there are sleep modes for when I want to record/display cell stats while riding, and use it for "intelligent LVC" or with bike at rest to monitor self discharge.
Only current and lower cell voltage monitored at present, I will use resistor voltage dividers for other cells: 2:1 - 5:1 ratios to bring all under 5 volts. If any cell ever goes over 5v, I think I have bigger problems than worrying about exactly how much over.
The 6 analog inputs seem to have VERY high impedance; readings didn't drop at all with 470K resistor, so I can use big values and not worry about running down battery by monitoring.
Only using 1 digital output at present; runs to a 2N2222 I've had for decades, and some resistors. It shunts up to 0.5 amps or so. Currently shunts whole pack but I'm just testing the shunt concept now; if whole pack to shunt, it would be better just to interrupt current from charger instead of wasting power. Charger is currently putting out about 0.5 amps too, so charge and shunt are matched. IE. the shunt can dissipate all the charging current.
Code is so simple it's not funny. Just a loop that reads the voltage; if it's over or at 4.19v it turns shunt on; if it's under, it turns shunt on and charging resumes. Loop runs 1000 times per second. SO, IMO, this is "bit banged PWM". It works...

DMM shows cell is in 4.19 to 4.18v range; occasionally I see 4.17 for whatever reason. Current through shunt tends to bounce around some value; it rose from 0 to 100 mA; I don't know why but currently only showing 30 mA or so (now 40).
It may be a challenge to find a simple shunting circuit that would work for higher cells, like cell 2 - 5 on my 5 cell YardWorks LiMn batts. I will see.
Voltages can be sent out the serial port/USB regularly for logging or display.
I ordered TME balancers last week,to use the I2C interface for monitoring cell voltages. Now I feel like I might be close enough to having my own balancers/BMS/charger/PC Interface working, I may not need the TME equipment. I could probably use the BIMs for I2C opto-isolation on 20s packs, even with my own devices.
Was thinking of making 5s4p packs though, for 27 KMH max and possibly better range and less concerns about high C rate discharges killing my batteries too early in their cycle lives. With 5s4p packs where all cells are undamaged and reasonably well matched, I could parallel all cells and need only 1 5 cell balancer/Interface etc. and not worry about isolation issues.
With 20s1p split into 4 batts with 5 cells each, I'd use the 4 TME balancers (or 4 of my own "Arduino Plus"'s) and the 2 BIMS (or some isolation board of my own). Hmmm, 5 virtual cells are a LOT less work (?) and worry than 20 real cells it seems.
I'm hooked on the Arduino now. Don't let the name throw you off like it did for me at first; it's wonderful, I promise.

There are "Lillypad" Arduino's meant to be sewn into clothing. I could think of uses for that, like virtual VR type throttles dependent on whatever motion or sensable action you can measure. Heart-rate speed control, auto-braking on methane detection... list goes on.
A hall or magnetic reed switch hookup and a console with LCD and buttons could complete the system hardware-wise and do bike computer / CA type stuff. A throttle connection in and out (Drive by wire ?) could be useful too, in addition to 3 axis accelerometers, GPS and some storage space. Perhaps an Eee PC or similar small Linux PC could do fancy graphs and real time display duties.
I have LOTS of professional software design/development experience, and I think a key route to getting things done quickly is to take the minimalist route; whatever gets the job done, simply and robustly. Smaller code is easier to read, change, debug or "prove correct", etc.
As an example, I'm imaging a bike computer / CA type device. To keep it simple, I'd avoid menus for main functionality. I'd just have fixed areas on the LCD for speed, distance, time, average speed, max speed and perhaps pack percentage left. Each displayed value would have one button to clear it; perhaps not needed for speed and pack %age though. In any case, the idea is that if you spend a few more bucks for a bigger LCD and a few more buttons, you may be able to avoid complicated code and User Interface / Menu issues.
For data-logging, simple lines of text via serial, or USB or I2C equivalent seems to be the way to go. A dedicated logging micro-controller could contain a CF or SD flash and just read and records the lines from multiple logging controllers.
Arduino has many "shields" available, which are cards that plug right in to add common peripherals etc. I'm looking to use off the shelf components as much as possible, and only build what makes sense to build. Micro-controllers can be like Lego, and I'd prefer to buy the Lego pieces ready-made and just add the system design and code.