fn wrap_words(text: &str, max_chars: usize) -> Vec<Vec<&str>>
Greedy line wrap on word boundaries; a single word longer than max_chars gets its own line.
max_chars