How to efficiently generate a stream of independent, but biased random bits?
If you want an answer that is maximally efficient in consuming a stream of random bits, then you need a decoder for arithmetic encoding.  However if you're using a moderately fast CSPRNG, why would you sacrifice extra clock cycles to squeeze all the biased bits you can from each unbiased bit?