1. I used MCP6002 — rail-to-rail opamp (both input and output). Supply voltage = 5V. Using rail-to-rail opamp simplifies the hardware design a lot and using this opamp, I was able to control current all the way from 1mA to 1A (and more). I also tried using LM358 (pin compatible, so remove MCP6002 from socket and insert LM358). But then, my max current was limited. That is either due to the lower limits of inputs/ outputs for this opamp. I could tweak the resistor to make the circuit work, but then, I had a bunch of MCP6002 lying with me as well, so better use them.
For more detail: Dummy electrical Load