Input range ~+-1 V, output range +- 10 mA / 1 mA / 100 µA / 10 µA / 1 µA (five switchable decades)
Output compliance to +- 10 V
Output impedance - any transistorized amplifier should have high enough output impedance
Load is of course grounded, otherwise this would be extremely easy.
Bandwidth - DC
These are just a bunch ideas how one might go about this. Most part values are "what LTspice had on hand", none of these designs is tweaked even for DC performance, not to speak of AC and stability.
Idea 1.)
Let's just put a current mirror in an OP's feedback loop. We use the OP's supplies for phase splitting

Problem: No way you can make this work over five decades. The gain is set by R9, and the emitter resistors (R1, R6, R12, R13) are only suitable for a narrow range of currents. So to make this work, you'd have to switch five(!) resistors for ranging. Also one needs two matched pairs, as the ratio of the mirror is not enhanced by the op amp.
Idea 2.)
This circuit is similar to a commercial implementation from fifty or so years ago. We use a differential amplifier's (Q3/Q5) (relatively) well defined transconductance to level shift our DC input to a current source (Q1/Q2), thermally compensated by D2/D3. Negative output currents are provided by Q4/Q8.

This actually works, but is tricky to bias correctly and has some compliance issues (for +-10 V output, Tek needed +- 30(!) V supplies, without cascoding). Also note that Q4/Q8 provide full scale negative current (e.g. -10 mA), while Q3/Q5/Q1/Q2 have a transconductance of 20 mS instead of 10 mS to make up for the -10 mA current at the output node; i.e. for +10 mA output current Q1/Q2 provide +20 mA. Balancing is tricky. Range switching through R1 and R2.
Idea 3.)
We can just use an OP instead of the differential pair from idea 2.), but this doesn't fix the output stage's shortcomings.
I think this line of thought could actually work reasonably well, if the lower current source is replaced by a less drifty and more accurate op amp current source.

Range switching would be through R1 and R2 again, R3 and R9 are fixed and the current through those is the same regardless of range.
Idea 4.)
Similar to idea 3.) except both sides are controlled by the op. Unlike idea 1.) we have to use an external phase splitter.

Idea 5.)
Howland current pump; also found in commercial implementations. You can make a Howland pump with a single range resistor.
Idea 6.)
Well you can always just use an INA. This might not be a totally unreasonable idea, given their by now pretty low cost and their generally excellent performance at low frequencies. This option would be greatly preferable to the Howland circuit in my mind, since you don't need that tightly matched quad of resistors to get decent performance. Like Howland, single range resistor.

Idea 7.)
Or you just "add more op amps". We use the precise-conductance idea from 4.) but instead of simple transistor current sources, we just throw two rail-to-rail (doesn't actually need to be rail-to-rail: U3 needs to be ground sensing and have swing near ground, while U2 needs to be high-side sensing and swing close to high side) op amps in there to get basically perfect VCCS behaviour. As an added bonus we can switch to FETs as output devices, which gets rid of the (small) base current error.

One problem with this will be stability around zero output current due to Q5 and Q7. We also need two resistors for range switching and accordingly get polarity-dependent gain mismatch.
However, this does get you the excellent linearity, compliance and very high output impedance that 5.) and 6.) can give you, without requiring matched resistors (beyond the two range resistors) or an instrumentation amp. Unlike 6.) you don't have to put a (likely slow, otherwise it gets expensive again) instrumentation amp inside your feedback loop. Instead we have simpler, local feedback loops.
Idea 8.)
We can address the issues from 7.) by simply not having a full phase splitter (see 2.) and 3.)). This does mean range resistors are probably going to be different values (and hence different dissipation, though not particularly important at these power levels), and we need some slight input offsetting to get a proper null at the output (which may need some trimming), and we also need a voltage reference on the low side (however these are abundant).

This is probably the sweet spot, at least for what I can come up with, in terms of part count + cost, accuracy, and output characteristics. At least for a single or few ranges -- since relays to switch the ranging resistors quickly become more expensive than the INA from 6.)