You are correct about the ADC and PWM issue.
You would need to filter the current measurement to give a steady ADC value.
Also, have a look at this thread for more ideas on measuring current.
http://www.picaxeforum.co.uk/showthread.php?25633-Displaying-volts-and-amps-via-18M2-and-LCD
The exact filter will depend on what PWM frequency you go for but do not over-do it or there will be a delay between measurment and compensation which can also lead to oscaillation. I tend to use a second order filter:-
10k - 100nF - 10k - 100nF works well for most PICAXE/motor PWM designs.
You say 30% gives about the right speed.
If you are using 255 for period that would be about 300 for duty.
Let's say running along the flat it pulls about 1A and for that current you get an ADC reading of 100.
When it goes up hill, let's say the current increases to 1.5A (so the ADC will now read 150).
Also, the speed has gone down a little.
If we just add the ADC value, it will be far too much.
We want to get roughly the same (namely 300) for the 1A load but a bit more for the 1.5A load.
This will require a fair bit of trial and error but a good starting point would be about 10% compensation.
So, to get the same speed but now with compensation.
Duty = 270 (300 - 10%)
ADC returns a value close to 100
Scale the ADC reading to get roughly the 10% we took away.
ADC = ADC/3 (gives about 33)
Call this Comp
Duty = Duty + Comp = 303 (back to original duty for original speed)
Now, the load increases to 1.5A and the speed drops a little.
ADC = ADC/3 now gives about 50
Duty = Duty + Comp now gives about 350 (instead of 303) because the current (load) has increased.
Hope that helps.