A) As an alternative approach, there are some C-like languages that compile down to VHDL or Verilog. See C to HDL on Wikipedia for details.
What a compiler for such a language usually produces is a customized circuit design for your specific "program". For instance, if you wanted to compute a*b+c*d+e*f, you might end up with a circuit that contains three multipliers and two adders and can run that computation for a different (a,b,c,d,e,f) tuple every cycle, sort of like a pipeline.
I suppose it depends on what you want to do. For low level applications, a CPU is slower than a customized circuit, but it's definitely easier to program.
D) I agree with FailedDev. You should start with the basics, mess around with VHDL or Verilog and light up some LEDs (for instance, implement a binary counter).