Improve `lang/isNaN` behavior. closes #39

the native `isNaN` is very confusing since it coerces value ToNumber:

    // native isNaN behavior:
    isNaN([])   // false
    isNaN('')   // false
    isNaN(null) // false
    isNaN('12') // false

this implementation solves edge cases and provides a more intuitive behavior:

    // our implementation
    isNaN([])   // true
    isNaN('')   // true
    isNaN(null) // true
    isNaN('12') // true