fix wrong String.at/2 output when second arg is not an integer

String.at/2 has the same issue as String.split_at/2 in issue #2874:  

```
iex(1)> String.at("elixir", 0.1)
** (FunctionClauseError) no function clause matching in String.do_at/3
    (elixir) lib/string.ex:1025: String.do_at({"l", "ixir"}, 0.1, 1)
iex(1)> String.at("elixir", -0.1)
nil
```

The fix is similar. 

----
I took a look at the other similar functions right now at String module expecting a second integer parameter, they all seem to be correctly using `is_integer` guards and I ran some random floating point inputs as tests and the tests are all passing, so hopefully there wouldn't need any similar patch regarding this kind of issue for the String module.