It all depends on what devices you plan on supporting. If you are doing something advanced with audio or graphics, you may feel that only the later devices are capable of what you want to do, so you only support the latest FW on the latest devices. That makes it an easy choice. If you are doing something significantly more straightforward, like a social networking app, you will probably want the most broad adoption and try to support all devices, meaning supporting 3.1.3.
He simulator is only good to test that thins are laying out properly and working in general. It's not a very good test of device capability or even versions.
I haven't checked yet, but I would be surprised if the latest sdk for v5 even supports building for 3.x versions, given how apple wants to keep pushing people forward.
Finally, you should check Latest stats on original iPhone and iPod touch usage. I am pretty sure that it will fall significantly short below 3GS and 4 usage. That should be part of your decision making on whether or nit it is worth developing for those devices.
I have the current iPhone. I keep it updated to the latest stable and it's my primary development device.
When significant new beta comes out, I buy a latest gen iPod Touch and install the beta. This becomes my primary development device for all beta builds.
Once the new iOS version is released, I update my iPhone to the latest OS version. At the same time, since Apple allows some overlap, I downgrade the iPod Touch to the latest old version of iOS. At this point, I leave the iPod touch frozen at that iOS version and use it for old compatibility testing.
Also, if there are significant bugs on apples part in a particular iOS that hamper our app, we'll drop it early.
I don't think it's reasonable to care about <3.1.2 on the phone shaped devices, or <4.0 on iPads
The issue here is that Apple specifically blocks restoring to any firmware except the very latest available. Since the iPhone 3GS and iOS 3.0, only the most recent firmware released for that device is allowed to be installed onto the device. And, to be very clear: that doesn't mean no downgrades, it means only the very latest is allowed. And that's even through Xcode's Organizer (which will "helpfully" allow you to try and restore older versions, which will then return an error partially through the restore), as well as iTunes when specifying a custom file to restore with.
Because of that restriction, I'm not sure how any other version can be supported: you have iOS 3.1 on an original iPhone, iOS 4.2 that an iPhone 3G can restore to, and iOS 4.3 on the current models. But other iOS versions don't have devices that can be restored to them. Do you just test in the simulator? Try and keep a device with the older version around, and hope it never needs to be replaced or restored if something goes wrong? I'm just not sure how something like that is managed.
(Note: there is a way around the above restriction, namely, saving Apple's "okay, you can restore to this version" response (often called a SHSH hash) when Apple is currently allowing that device to be restored to a certain version, and then spoofing that same reply later when you want to restore. That's how TinyUmbrella[1] and Cydia's TSS service[2] work, but it's (of course) not supported and won't even be possible as of iOS 5.)
[1]: http://thefirmwareumbrella.blogspot.com/ [2]: http://www.saurik.com/id/12