Update (#749)

Update:

 * Bazel: fix MSVC configuration
 * C: common: extended documentation and helpers around distance codes
 * C: common: enable BROTLI_DCHECK in "debug" builds
 * C: common: fix implicit trailing zero in `kPrefixSuffix`
 * C: dec: fix possible bit reader discharge for "large-window" mode
 * C: dec: simplify distance decoding via lookup table
 * C: dec: reuse decoder state members memory via union with lookup table
 * C: dec: add decoder state diagram
 * C: enc: clarify access to static dictionary
 * C: enc: improve static dictionary hash
 * C: enc: add "stream offset" parameter for parallel encoding
 * C: enc: reorganize hasher; now Q2-Q3 require exactly 256KiB
           to avoid global TCMalloc lock
 * C: enc: fix rare access to uninitialized data in ring-buffer
 * C: enc: reorganize logging / checks in `write_bits.h`
 * Java: dec: add "large-window" support
 * Java: dec: improve speed
 * Java: dec: debug and 32-bit mode are now activated via system properties
 * Java: dec: demystify some state variables (use better names)
 * Dictionary generator: add single input mode
 * Java: dec: modernize tests
 * Bazel: js: pick working commit for closure rules
diff --git a/compiler_config_setting.bzl b/compiler_config_setting.bzl
new file mode 100755
index 0000000..572032b
--- /dev/null
+++ b/compiler_config_setting.bzl
@@ -0,0 +1,28 @@
+# Copyright 2018 Google Inc. All Rights Reserved.
+#
+# Distributed under MIT license.
+#  See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+
+"""Creates config_setting that allows selecting based on 'compiler' value."""
+
+def create_msvc_config():
+  # The "do_not_use_tools_cpp_compiler_present" attribute exists to
+  # distinguish between older versions of Bazel that do not support
+  # "@bazel_tools//tools/cpp:compiler" flag_value, and newer ones that do.
+  # In the future, the only way to select on the compiler will be through
+  # flag_values{"@bazel_tools//tools/cpp:compiler"} and the else branch can
+  # be removed.
+  if hasattr(cc_common, "do_not_use_tools_cpp_compiler_present"):
+    native.config_setting(
+      name = "msvc",
+      flag_values = {
+          "@bazel_tools//tools/cpp:compiler": "msvc-cl",
+      },
+      visibility = ["//visibility:public"],
+    )
+  else:
+    native.config_setting(
+      name = "msvc",
+      values = {"compiler": "msvc-cl"},
+      visibility = ["//visibility:public"],
+    )