I own a construction company and these are questions I hear all the time. I also run a small fund that does development so I can appreciate it from both sides.
1. Contractor pricing is generally done on a fixed bid or a cost plus model. A fixed bid is a single price. Cost plus is labor + materials + expenses + Profit or fee. I personally have been running cost plus recently because commodity prices are all over the map and I feel it better aligns my interests with the clients interests (my fee is fixed, so if you choose expensive tile or cheap tile it does not matter to me)
2. Yes. Contingency is typically 10% (on the low end) to 30% (on the high end). I do a lot of work in Historic Charleston and my contingency can run as high as 50%. It really depends on the project and the number of nasty surprises you might encounter.
3. If the additional fee is the result of a change in the Scope of Work it's on you. If it is just bad estimating it's on the contractor. One thing to note: the SOW for a fixed bid project is usually orders of magnitude more detailed and specific. Expect to pay for the cost of developing a detailed SOW. And don't be surprised if you are charged for the estimate. A good estimate takes a lot of time and a lot of skill so don't expect it to be free. If you'd like to read on I how develop a take off you can check it out here.
4. NO!! It all depends on the project. Sure ground up new construction should probably have a fixed price. But a gut reno on a DC town house in Le Droit Park or some other up and coming area generally has too many unknowns for a fixed bid to be appropriate.
I feel your pain on needing to bid before you can do the due diligence. It's really hard and it's not going to get better. As a rule of thumb an accurate bid takes about 40 hrs of work and 10 site visits. What I can recommend is taking some floor plans and product from nearby neighborhoods or houses you like and backing out the estimate from that. That will make you more confident when it comes time to pull the trigger.
Hope this helps.