Flatten depth and behavioral differences.

`seq.flatten()` has changed in a couple ways:

 * Now accepts an optional `depth` argument to describe how deep it should flatten. By default it will flatten infinitely deeply. This is different from the previous behavior of always flattening shallowly. As a convenience, it also accepts boolean "shallow" (e.g., it converts booleans to numbers).

 * Now *only* flattens Sequence instances and not sequenceable values (which would include Array, string, anything with @@iterator). This is different from previous behavior of flattening anything that could be converted to sequence and not only instances of Sequence.

 * flatMap() and concat() behavior of have not changed, and still allow mapping to and concatting sequenceable values and not only Sequence instances. (Read: no changes here).