Update float fields to cast strings more strongly

This is another another small behavior change to match my expectations as a client of this library

Today, float fields handle strings in a few funny ways, and this updates the gem to behave match my expecations. Again, would love some feedback on this approach.

1. Setting a float field from a string, is readable is readable as a string?

  ```ruby
  msg = SomeMessage.new
  # current behavior
  msg.float_field = "1.23"
  # => "1.23"

  # after this patch, my expected behavior
  msg.float_field = "1.23"
  # => 1.23
  ```

2. Setting a float field with a non-numeric string  does not raise any errors?

  ```ruby
  # current behavior
  msg.float_field = "asd"
  # => "asd"

  # after this patch, my expected behavior
  msg.float_field = "asd"
  # => ArgumentError
  ```

cc @jkingdon

Good idea! Updated in 5ea34151acb541938afd7472086949917a8e0ace. There are about 4 other `define_setter` methods, and they would need a little more refactoring before being combined, going to only share float + base for now.