1) Bitcoin base layer - Who determines the bitcoin transaction fees? Is it the sender? For example, if the sender wants to increase the likelihood of miners including the senders transaction into the candidate block, then the sender can set a higher fee to compensate the miner? If this is the case, then how come most of the common exchanges have a fixed bitcoin withdrawal fee (usually around 0.0004 bitcoin or around $20), which I am unable to change?
I can answer this.
Exchanges often charge a fixed fee because it causes the customer less unexpected miner fees and it's also most profitable for the exchange.
Lots of customers want their coins on the very next block because they are arb trading between exchanges and if their transfer takes over 11 minutes... it's the end of the world.
It's better to charge their ass off and send it fast. Reduces customer support, pissed off customers, confused customers, makes it more expensive for people just bouncing coins around and make the exchange money.