The diodes at the bottom are indeed zeners. They have 5.1V breakdown voltage. The reason they are there is to make it so you can actually program your chip instead of zapping it with 12V (see below).
It should be possible to replace 1N4148 diode with another switching diode. What that part of the circuit is used for is for lowering the
RESET line which is necessary during the ISP programming. As jippie suggests, it is there to protect the transistor: pin 3 on the DB9 is hte RS-232 TX pin, which may be as low as -15V, which is lower than the emitter voltage, which is 0 because it is tied to ground. The maximum emitter/base voltage for BCS549 is 5V, whereas in this case, without the diode it could be as much as 15V.
The +5V in this case is Vcc. The reason you have to supply +5V to the chip being programmed is because if the chip is not powered, it cannot be programmed. And yes, you have to supply the +5V yourself, since RS-232 does have a +5V connection. Neither can RS-232 pins be used to provide +5V in a simple fashion since RS-232 does not necessarily use +5 voltage levels.
With some extra programming and extra components, one might be able to make the free DB-9 pin (pin 9, the ring indicator) provide +5V, however, this will make your circuit and programmer life more complicated, not simpler.
On the simplicity of this circuit (responding to some edited-out bits): most other ISP programmers use an IC (such as another ATmega) internally (see USBtinyISP, USBasp, etc). Your programmer has only nine components (not counting the connectors) which is a pretty simple circuit. You could consider a parallel programmer such as this one or this one or many other variations on this theme you might find on Google if you need a simplest circuit. The simplest way to make an ISP programmer is to buy one: Ebay has a ton of them quite cheaply.