Raise an exception for invalid UTF-8

Same issue as the one logged in this ticket: https://jira.mongodb.org/browse/RUBY-779
Hi guys :) Hope you're all doing well.

I'm chiming in because I had the same thoughts as Gary when I saw this in my feed and I noticed some relatively expensive redundancy for this change here:

https://github.com/estolfo/bson-ruby/blob/utf-8-encoding/lib/bson/string.rb#L100-L119

When you call `to_bson_string` with invalid UTF-8 it's going to dup and force encoding in `to_utf8_binary` then repeat that process again on rescue in `to_bson_string` if an `EncodingError` is raised. 

That's a bit undesirable and there's definitely some overlap in what both of these are trying to achieve. It looks like `to_bson_string` probably needs to be reworked to account for this change as well so that they're not repeating unnecessary work.