Its not "crappy motors", its just the way things are with open-loop control.
You see, you don't have any feedback to the arduino as to how fast and how far the motors have turned. So, you need to incorporate feedback, and then in your program, interpret the feedback so that if one of the motors is going faster than the other, slow it down, until both match.
There are several approaches to how this could be done - the easiest being an optical slit encoder. Basically, that is a disk that is mounted to the output shaft (which is typically connected to a wheel - but you're using a tracked system - but its the same principle) that has slits or dark/light patches, that with an optical detector, you can detect those HIGH/LOW transitions - the frequency of the transition being the speed of the output shaft (this is simple encoder - using a quadrature encoder you can detect direction of rotation as well).
You can see an example of such an encoder (plus a lot of other info) here:
In the above example, they are using a light/dark wheel, and a "sideways looking" optical sensor (there is also what is called a slit sensor, which looks like a U-shaped piece of plastic holding the IR LED on one side, and a photo-transistor on the other - the wheel has a series of slits, and as they pass the sensor, they block/let-thru the IR light to trip the sensor - the old non-optical mice used this method; this is also a good and easy way to get such encoders).
As you can tell, the sideways looking type can be easily printed with a laser or inkjet printer (a slit version can be printed too, on transparency "paper" - but you don't see it often; commercial slit encoder wheels are typically made of plastic or metal).
Also - check the following article out, it shows an example of how to build such encoders:
(NOTE: The Seattle Robotics Society is one of the oldest hobbyist robotics clubs in existence; check out their site!).
As far as wall avoidance, you might want to check out ultra-sonic sensors (like the Parallax PING - there are other variants as well), as well as the Sharp IR distance sensors. For following something around, I suppose you could mount one of the Sharp IR sensors on a servo and "scan" the area for a particular frequency of IR light, and follow toward that based on the angle of the servo...