For programming an FPGA via USB, I would highly recommend buying a knockoff JTAG cable from ebay. You can get a Xilinx compatible one for about $40. I have a couple of them myself, and they work great. You should be able to get Altera compatible cables as well.
In terms of communicating with an FPGA or microcontroller, there are a couple of possibilities. If all you need is really low bandwidth communication, a serial to USB chip such as the ones made by FTDI or Exar are quite good. However, you can't go all that fast with a serial port.
If you need a higher bandwidth, you should get a microcontroller with a built-in USB controller. For an FPGA, you can get USB PHY chips that take the USB signal and convert it to a parallel bus. With this sort of a setup, you can use all of the bandwidth that USB provides.
Another possibility is to use an FTDI FIFO chip. This looks sort of like a serial port, but the chip doesn't contain a UART, it just takes the data out on a parallel bus. This is far more efficient at utilizing the link bandwidth than a UART. This can be used with either an FPGA or a microcontroller.