The way that it set_status! and get_status work right now is too verbose.
You have to pass max_eval, max_iter and max_time every time. Probably these should be stored as part of the stats, or as a separate object - this would have to be internal to stats to avoid allocation.
The done = stats.status != :unknown is prone to error. A function check on stats would be better.