Make type casts safer.
fix #1823
add "?" specifier to check if preceding optional argument is given
implement Array#sample in mruby-random gem
refactoring mruby-random
add data_type check to mruby-random
use NAN and INFINITY

The macro str_to_mrb_float (strto[df]) converts a string to a number,
but these two macros can be used to directly get the special value.

The NAN macro requires quiet NaN support, but so does str_to_mrb_float.

This change also circumvents missing C99 support in Microsoft's C library.
Its (or ISO C90's) strtod doesn't parse "nan" or "inf".
MSVC: add NAN and INFINITY for older versions
Merge pull request #1832 from ksss/fix-1823

fix #1823
Merge pull request #1831 from monaka/pr-make-type-casts-safer

Make type casts safer
remove invocation of strlen() on buffer of strings; with refactoring
use mrb_str_cat_lit for literals
Merge pull request #1834 from cremno/use-nan-and-infinity-macros

use NAN and INFINITY macros
Merge pull request #1833 from cremno/use-mrb_str_cat_lit

use mrb_str_cat_lit for literals
Merge branch 'master' of github.com:mruby/mruby