add try fill

A more useful version of read_at_least.
What happens if EOF occurs? It's not returned, and further bytes are read?