Why do I have those two linux folders in /usr
Those are the header files for the kernel(s) you have on your system. Both can be removed through apt-get (do not do it manually). (probably sudo apt-get purge linux-image-3.8.0-29)
What exactly is generic version of ubuntu ? how it differes from other versions?
"generic" means the general usage kernel. It is the kernel used for desktop installations. Before 12.04 we also had a "generic-pae ", "server" and "virtual" version next to "generic" but that distinction was removed. Nowadays we have "omap" (Kernel for TI OMAP3 and OMAP4) and "highbank" (Kernel for Calxeda Highbank).
In general the difference are optimal setttings for that specific hardware. Here is a list for several Ubuntu versions.
linux-source-x.y.z), whereaslinux-headers-x.y.zprovides the header files necessary to compile new modules for the kernel (eg, the proprietary nvidia driver), but not a complete new kernel. Why this lives in/usr/srcrather than/usr/include(the normal location for header files) I'm not entirely certain - I suspect it is because files in/usr/includeare to build programs that will run under linux, whereas the kernel headers are for building new parts of linux. – chronitis Jan 07 '14 at 12:08