Add BList

Still need to impl a few methods, but this is a good starting point.
I find the control flow backwards here: this executes "first" semantically (i.e. get something out of the left iter, if that fails, get something out of the middle, if that fails, get something out of the right iter) but is listed last.