Another answer already answered the current sensing question, so I'll respond to this part:
I was thinking to use three voltage dividers (for three ranges: 0-5, 0-10 and 0-15) and switch them with mosfets. Then I would use a 16 Bit ADC rather than the 10 Bit ADC built in the Arduino...
Switching between dividers is probably not necessary, given you are using a 16-bit ADC. Switching from a 0-5 range to a 0-15 range only gives you the equivalent of about 1.6 more bits of resolution. And it will also degrade the accuracy of the measurement somewhat due to the on-resistance of the switch.
A 16-bit ADC with 15 V full-scale range (after pre-scaling) gives 0.2 mV resolution. Do you really need better than that?
Is that an accurate way to sense voltage and what tolerances would the resistors need to have?
This really depends what accuracy you want for the whole system. Since you chose a 16-bit ADC, I'll assume you want close to 16-bit accuracy.
To give 16-bit accuracy without calibration, you'd need resistor tolerance better than than \$1/65,536\$ or about 15 parts per million. (Actually you want about 2x better than this because of the way the errors for the two resistors add up in the voltage divider configuration---there's an app note from TI that goes into more detail)
With calibration, you're more interested in how the resistor values vary with temperature, and particularly how well the two resistors in the divider track each other (maintain the same ratio) over temperature.
You will find it requires quite careful design to achieve 16-bit accuracy. For example, you'll also need to account for leakage currents due to contaminants on the circuit board surface. Resistor value drift due to mechanical stress, resistor value drift due to applied voltage, etc.