The first thing to get your head round is "serial programmng"; this confusingly refers to how the bits are pushed into the PICmicro, one at a time in a long stream, rather than how the programmer necessarily connects to your PC.
The first question is how you wish to connect to your PC ( serial port, parallel, USB ) ?
PICmicro programming is also a marriage between the programmer hardware and the software which drives it running on the PC, and for serial port and USB programmers, firmware within the device itself. You need to find the right combination of hardware and software which will program the chips you are thinking of using, now and in the future.
For general purpose, all-round experimenting I would recommend 16F688 (14-pin), 16F88 (18), 18F1320 (18), dsPPIC30F3012 (18), 18F2450/18F2550 (28), 18F4455/18F4550 (40). The 12F683 sounds like a good choice for an 8-pin.
You should really be looking for a HVP ( High-Voltage Programming ) programmer rather than LVP as that will give you much more flexibility.
And, yes, it's all very confusing. Most designs have evolved in particular families and are often compatible within the family, but not always. Unless buying a pre-built programmer which comes with software and support for a particular chip is advertised, it's a case of having to plough through what software there is and match that against what chips and programmers it supports. Be aware that software support for some chips can be buggy ( especially for some 18F's ) and you may need to use more than one piece of software to use the same programmer with different chips.
I have a P16PRO40 parallel port programmer ( "Tait" family ) which I like, and use PicAll and IC-Prog software although neither support all the chips I'd like them to. It would be interesting to hear what others use.
For someone starting off I would recommend a cheap(ish) ready built programmer ( such as the Rev-Ed BAS800 ), or simply take someone's recommendation as to what they use. Otherwise, find software you like / want and chose the programmer to match is the way I would recommend ( my path was dictated by the programmer being a birthday present ).