I would wire up a Power N-FET, that could handle up to the full 5A and 12V across it, wire it in series between the LEDs' common-cathode and the GND, and pulse-width-modulate its base using the Arduino to control the brightness. That will give you the illusion of dimming, as brightness is a function of the average current experienced by the LED, and the physiology of the human eye will take care of the rest :).
If you want individual control of each LED then you will want something like this shift register LED driver. The TLC5916 chip can drive displays that are connected to a range of voltage. It also will use a constant current technique for each segment to keep brightness even for all LEDs. It may be advisable to still put some resistance in series with each LED before connecting to the TLC5916 outputs to share some of the voltage drop and reduce power dissipation in the driver chip if you are running with a higher LED drive voltage.
You can obtain the TLC5916 chips from Mouser in both DIP and SOIC package styles. The data sheet is available from there as well.
I do not think you need to worry too much about the length of the wire causing a lot of resistance. For 20mA you do not need a very big wire diameter. Even something small like 30 AWG wire can handle well over 100mA and is ~10 ohms in 100 feet.
If you use the driver chip I recommended you could use a distributed design where you run the serial data controls from chip to chip in the LED harness that goes in groups of 8 LEDs at a time. Local short wiring to each LED would be possible. The control signals, CLK, DATA and LATCH plus the sets of eight local LED wires could easily be done with small wire like 28 or 30 AWG stranded wire for flexibility. The distributed POWER and GND would need some larger wire to deal with the overall power. Your 52 LEDs at 20mA each equates to just over 1 Amp plus the total of 7 of the LED driver chips will consume approximately 15mA per chip so add on another 105mA. Seems like a 1.5A supply would work nicely for you. For the two supply leads I would recommend a slightly larger wire size such as 18 AWG. This can carry the total current required and it can run a total if 156 feet and only have 1 ohm of resistance. This particular pair of wires is important because you want to minimize the voltage drop across this part of the circuit as much as possible.
The LED driver chips want to have their VDD pins connected to +5V. You should be able to also drive the LEDs from the same 5V supply line. The driver data sheet (Fig 14) shows that when you set the constant current sink for 20mA the chip's output drop will work nicely at anything greater than about 0.5V. With the LED VF of 3.3V the driver chip would be operating with an output voltage of (5 - 3.3) = 1.7 volts. If all of the 8 LEDs for one driver were ON at the same time the output power in the part would be (1.7 x .020 x 8) = .272W. This is well within the power rating for the driver chip and no series resistors for the LEDs would be required.
Using this scheme the micro controller board would have very simple wiring using only three I/Os. The software would run the LED driver shift register chain with a slow bit-banged CLK and DATA stream for 56 pulses and then drive the LATCH signal with a single pulse to update the outputs to the LEDs.
Each of the LED drivers could be designed onto a narrow little PC board that could be covered over with a piece of white shrink wrap tubing. Three small free hanging wire harnesses with inline connectors could be left sticking out of the ends of the heat shrink tubing. One with 9-pins to connect to eight local LEDs and two others to work as daisy chain connector cables to reach to the next driver in the chain. One of the cables ends would be made long enough so that it reached to the next display driver's input connector.
You had mentioned a total length of something like 30 feet over 52 LEDs. This puts a modularity of ~4.5 feet from driver module to driver module. That would give you an idea of how long these cable stubs on each driver assembly would have to be. The wires inside the heat shrink tubing could be soldered directly to holes in the small circuit board.
Best Answer
PWM modulation is the way to go with this as it saves wasting a lot of power in heat that an adjustable current source would generate.
Building a PWM control can be done with many types of circuit designs but honestly the simplest to implement may be with using a microcontroller on a low cost board such as an Arduino.
If you want to build your own circuit there are a plethora of circuit resources available on line.
On the other hand if you want to keep your life as simple as possible at very low cost then consider visiting eBay and picking up a low cost adjustable module for a few bucks.