change Block::work semantics a bit and add Block::can_work