Different people advocate different level-shifter solutions. I always gravitate to the simplest
solution that accomplishes the job.
A 5V->3.3V voltage divider will work well on the receive side, although this runs the risk that the RX
input to the r.Pi will be sitting at 0V if the Arduino is disconnected. Normally RX pins are high at idle
[no signalling], not low.
For the 3.3V->5V side, I've been using a pullup R [4.7K or so] to 5V on the RX, and a regular 1N4148
diode wired over to the 3.3V TX pin. This provides hi=4V and lo=0.7V, which is perfectly adequate.
Basically, half of a wired-And diode ckt,http://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/WiredAND.svg/220px-WiredAND.svg.pnghttp://en.wikipedia.org/wiki/Wired_logic_connection