Pilkaster,
I recommend you to read thoroughly Microchip's AN696:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011782
Despite it is Microchip hw based, it describes most of your project needs.
Suby, would you recommend that I create my own method and not use the PID-libary and set the I and D variables to 0? I didn't quite understand the feedforward explanation.
Yes, of course.
I haven't read Arduino's PID library but I assume that it's good for many things like temperature control or speed regulation but not this issue.
I know I probably only need a P - regulator.
The simplest position control with DC motor just consists on a position loop that regulates the power drive. I mean:
sp_to_drive = Kp*( target_position - current_position )
This is very simple but may cause you some problems caused by Kp value and maybe your system stops before reaching to the target position.
Next step could be a profile control as shown in AN696. Then you need to generate a position versus time profile: acceleration, cruise speed and deceleration. The simplest way to write this must be to fix an scan time (this time stamp) and have three different position increments for acceleration (usually half the cruise position steps), cruise speed and deceleration (also half the cruise).
This is trapezoidal control, as said Ro-Bot-X:
- Trapezoidal Trajectory Profile processing (constant accel ramp, constant velocity cruise, then constant decel rampdown);
Now this P regulator will behave a bit different:
Kp*( position_set_point - current_position)
where the position set-point is the sum of all the position steps from start. This must be added to your speed reference.
Your encoder will read an instantaneous position. If you get the counts difference between now and the last time stamp (let's say 10 ms before!), you will get the actual speed.
You can perform this same calculation for the desired speed just taking the current theorical position increment. This is the profile feed-forward.
So now we have
Kp_positionposition_error + Kp_speedspeed_error
It's quite common to have also an integral action in speed control.
The final number you get must be scaled between 0 and 255 and sent to an analogWrite().
Industrial systems work like this!! 
Good Luck!
/me