Hide JsonDocumentTransformer (#43)

Closes #34

This was only used through the top level variable `jsonDocument` and no
use cases have surfaced for being able to pass a `reviver` or
`toEncodable` callback.

This implementation does not use `StreamChannelTransformer.fromCodec`
with a `JsonCodec` since the encoder and decoder are not 1:1.

- Remove the `JsonCodec` field and use `jsonEncode` and `jsonDecode`
  calls directly.
- Move the detailed doc to `jsonDocument`.
- Make the class private.
- Remove the tests constructing the class directly.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0e125dd..8ebdc28 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,13 @@
 ## 2.0.0
 
-* **Breaking change** `IsolateChannel` requires a separate import
+**Breaking changes**
+
+* `IsolateChannel` requires a separate import
   `package:stram_channel/isolate_channel.dart`.
   `package:stream_channel/stream_channel.dart` will now not trigger any platform
   concerns due to importing `dart:isolate`.
+* Remove `JsonDocumentTransformer` class. The `jsonDocument` top level is still
+  available.
 
 ## 1.7.0
 
diff --git a/lib/src/json_document_transformer.dart b/lib/src/json_document_transformer.dart
index a53ac92..8bffc8a 100644
--- a/lib/src/json_document_transformer.dart
+++ b/lib/src/json_document_transformer.dart
@@ -9,9 +9,6 @@
 import '../stream_channel.dart';
 import 'stream_channel_transformer.dart';
 
-/// The canonical instance of [JsonDocumentTransformer].
-final jsonDocument = JsonDocumentTransformer();
-
 /// A [StreamChannelTransformer] that transforms JSON documents—strings that
 /// contain individual objects encoded as JSON—into decoded Dart objects.
 ///
@@ -21,26 +18,18 @@
 /// If the transformed channel emits invalid JSON, this emits a
 /// [FormatException]. If an unencodable object is added to the sink, it
 /// synchronously throws a [JsonUnsupportedObjectError].
-class JsonDocumentTransformer
-    implements StreamChannelTransformer<Object, String> {
-  /// The underlying codec that implements the encoding and decoding logic.
-  final JsonCodec _codec;
+final StreamChannelTransformer<Object, String> jsonDocument =
+    const _JsonDocument();
 
-  /// Creates a new transformer.
-  ///
-  /// The [reviver] and [toEncodable] arguments work the same way as the
-  /// corresponding arguments to [new JsonCodec].
-  JsonDocumentTransformer({reviver(key, value), toEncodable(object)})
-      : _codec = JsonCodec(reviver: reviver, toEncodable: toEncodable);
-
-  JsonDocumentTransformer._(this._codec);
+class _JsonDocument implements StreamChannelTransformer<Object, String> {
+  const _JsonDocument();
 
   @override
   StreamChannel<Object> bind(StreamChannel<String> channel) {
-    var stream = channel.stream.map(_codec.decode);
+    var stream = channel.stream.map(jsonDecode);
     var sink = StreamSinkTransformer<Object, String>.fromHandlers(
         handleData: (data, sink) {
-      sink.add(_codec.encode(data));
+      sink.add(jsonEncode(data));
     }).bind(channel.sink);
     return StreamChannel.withCloseGuarantee(stream, sink);
   }
diff --git a/test/json_document_transformer_test.dart b/test/json_document_transformer_test.dart
index 83ee099..e6c560a 100644
--- a/test/json_document_transformer_test.dart
+++ b/test/json_document_transformer_test.dart
@@ -32,20 +32,6 @@
         completion(equals(jsonEncode({"foo": "bar"}))));
   });
 
-  test("supports the reviver function", () {
-    var transformed = channel
-        .transform(JsonDocumentTransformer(reviver: (key, value) => "decoded"));
-    streamController.add('{"foo": "bar"}');
-    expect(transformed.stream.first, completion(equals("decoded")));
-  });
-
-  test("supports the toEncodable function", () {
-    var transformed = channel
-        .transform(JsonDocumentTransformer(toEncodable: (object) => "encoded"));
-    transformed.sink.add(Object());
-    expect(sinkController.stream.first, completion(equals('"encoded"')));
-  });
-
   test("emits a stream error when incoming JSON is malformed", () {
     var transformed = channel.transform(jsonDocument);
     streamController.add("{invalid");