What is some pre-requisite information one should know before applying to a CS grad school in the US? I am a junior who is going to apply to a CS grad school(hoping to specialize in programming language theory) next fall.

I had some generic questions about the admissions process that is not so easy to get the answer to - 


Do all European PhD programs require a masters degree for admission?
Or are there programs where like the US if you have a 4 year
bachelor's degree, you can apply to the PhD program?
Since in the US, one applies to the program and not
the professor, one might end up wanting to/end up working with
anyway with another professor from the same department after they get accepted and spend some time in the program - so should I
even contact them pre-acceptance?
Do all (at least tier 2) CS PhD programs in the US come with
funding? If not, how do I figure out if the program comes with
funding?
Is it a wise idea to mail the admissions committee of the
Universities to ask if the application fee might be waived
considering I come from a 3rd world country?
I will give some guidance for the US only. 

Here, you apply to a school or to a department. There is no need to contact professors beforehand. I would do so only if you have already set a research agenda and only a few professors would qualify to guide it. Most "blind" contacts are treated as noise by professors until you formally apply and are at least close to acceptance. 

Funding in CS in the US is most likely to be from a TA position. One gets a very modest salary and (normally) waiver of tuition fees. It is enough to live on in most places (harder around Silicon Valley, where housing is outrageous). The tasks are helping professors with their courses, such as leading smaller question-answer sessions and grading. Those with more experience might get to teach intro courses. Normally you would apply for a TA position when you apply for admission. Ask each institution about the possibilities. In some subfields, in might be possible to get a research assistant position funded through a professor's grant. This might be good, but if the funding ends, so does the job. 

You can always ask for fee waiver and probably should. It may be possible or not.  Things are very variable in the US as there is no national system of universities.