Word truncation

Patched the truncate strings method to include truncation by word

Examples: 

    'Once upon a time'.truncate(4, word: true)
    => "Once upon a time"

    'Once upon a time in a world far far away'.truncate(4, word: true)
    => "Once upon a time..."

    'Once<br>upon<br>a<br>time<br>in<br>a<br>world'.truncate(5, word: true, separator: '<br>')
     => "Once<br>upon<br>a<br>time<br>in..."

    'Once<br>upon<br>a<br>time<br>in<br>a<br>world'.truncate(5, word: true, separator: '<br>', omission: '[...]')
     => "Once<br>upon<br>a<br>time<br>in[...]"
The `split` here is still allocating a separate string for every word... what about something like:

``` ruby
def truncate_words(words_count, options={})
  sep = options[:separator] || /(?<=\w)\b/
  sep = Regexp.escape(sep.to_s) unless Regexp === sep
  if self =~ /^((?:.+?#{sep}){#{words_count - 1}}.+?)#{sep}.*/
    $1 + (options[:omission] || '...')
  else
    dup
  end
end
```