So... assuming a maximum output of 100mA with 10 levels, and 3 scales (full scale 1mA, 10mA, and 100mA), and a beta that can be anything from 10 to 300.

The maximum base current required is 100mA/10 = 10mA.

The minimum base current required is 100uA/300 = 330nA.

Quite a range. The Teensy 3.1 and up have a 12 bit DAC built-in. That is only 4096 levels. So I'm thinking MOSFET switching of resistors.

Calibrate the voltage from the DAC to base current by putting 1V on the base resistor, measuring the base voltage, subtract, calculate.

Or modify a current transmitter IC to the purpose.

See "span adjust" on pin 8, 9, and 10:

http://www.ti.com/lit/ds/symlink/xtr110.pdf Rather expensive at $16 each

See Rset on pin 7:

http://www.ti.com/lit/ds/symlink/xtr111.pdf Rather cheap at $2 each

This circuit is bidirectional, which would help in making this work for PNP also, and for JFETs. The voltage source will also need to be bidirectional, then.

Iout =Vin/R6

http://www.next.gr/circuits/VOLTAGE-TO-CURRENT-CONVERTER-l51228.htmlA much simpler voltage to current source/sink:

http://www.seekic.com/circuit_diagram/Power_Supply_Circuit/VOLTAGE_PROGRAMMABLE_CURRENT_SOURCE.html