Before, any JS Number which was an integer would be serialized as an INT if it fit in 32 bits, and as a LONG otherwise. This broke when integral Numbers were larger than 2^63. Now such numbers are represented as DOUBLEs. Before, any Long was deserialized as a Long, which was awkward because you'd serialize a Number and get back a Long, which is awkward to deal with. Now, any Long which is in [-2^53, 2^53] (a range that can be precisely represented by a JS Number) is deserialized as a Number.
Note that this includes ReplicaSet support, and options.