Added lazy `range`
Use `String` constructor instead of concatenation trick

The concatenation trick will call `valueOf` under the hood,
which has funky implications if you're dealing with `seq`
since we're overriding `valueOf` there.
Changed `type` to return prototype name if available
Added `vec` as a way to realize seqs into arrays
Change `seq` to deal with `nil` instead of `null`
Added `take` as a lazy sequence
Added `isEmpty` and changed `count` to throw on uncountables

Previously `count` would return 0 for falsy values, but this
doesn't really make much sense for booleans, for instance.
Now, it'll throw if the object is uncountable.

`isEmpty` will return true for anything that can be counted,
and since it uses `count` will throw if something can't.
For seqs, it'll only return true if `length` is reported as 0;
undefined lengths are returned as `false` because we can't
know.