ci: upgrade Travis config to Ubuntu 18.04

Also in this commit:

 * Disable ASan with gcc 9 due to a compiler bug
 * Drop clang 3.8 (no easy way to install it on 18.04)
 * Add clang 10 (trunk)
 * Drop Xcode 8.3
 * Upgrade Xcode 10.2 to 10.3

Change-Id: I424d189e037d82d1230a12e72bea479f42dd680c
diff --git a/.travis.yml b/.travis.yml
index cdbd696..d98dd24 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,5 @@
 language: cpp
-dist: xenial
+dist: bionic
 env:
   global:
     - JOB_NAME=limited-build
@@ -17,14 +17,14 @@
       env: COMPILER=g++-7
     - os: linux
       env: COMPILER=g++-8
+    # disable AddressSanitizer with gcc 9 due to
+    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90570
     - os: linux
-      env: COMPILER=g++-9
+      env: COMPILER=g++-9 DISABLE_ASAN=yes
 
     # Linux/clang
     # https://apt.llvm.org/
     - os: linux
-      env: COMPILER=clang++-3.8
-    - os: linux
       env: COMPILER=clang++-3.9
     - os: linux
       env: COMPILER=clang++-4.0
@@ -40,13 +40,12 @@
       env: COMPILER=clang++-8 DISABLE_ASAN=yes
     - os: linux
       env: COMPILER=clang++-9
+    - os: linux
+      env: COMPILER=clang++-10
 
     # macOS/clang
     # https://docs.travis-ci.com/user/reference/osx/#macos-version
     - os: osx
-      osx_image: xcode8.3
-      env: OSX_VERSION=10.12
-    - os: osx
       osx_image: xcode9.2
       env: OSX_VERSION=10.12
     - os: osx
@@ -59,10 +58,10 @@
       osx_image: xcode10.1
       env: OSX_VERSION=10.13 USE_OPENSSL_1_1=yes
     - os: osx
-      osx_image: xcode10.2
+      osx_image: xcode10.3
       env: OSX_VERSION=10.14
     - os: osx
-      osx_image: xcode10.2
+      osx_image: xcode10.3
       env: OSX_VERSION=10.14 USE_OPENSSL_1_1=yes
     - os: osx
       osx_image: xcode11
@@ -72,32 +71,31 @@
       env: OSX_VERSION=10.14 USE_OPENSSL_1_1=yes
 
   allow_failures:
-    - env: COMPILER=clang++-9
+    - env: COMPILER=clang++-10
 
   fast_finish: true
 
-install: |
+before_install: |
     case ${COMPILER} in
-      g++-5)
+      g++-[567]|clang++-[3456].*)
         ;;
       g++-*)
         travis_retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
         travis_retry sudo apt-get -qq update
-        travis_retry sudo apt-get -qy install "${COMPILER}"
         ;;
       clang++-*)
-        CLANG_VERSION=${COMPILER/clang++}
-        if [[ ${CLANG_VERSION} != "-3."* ]]; then
-          travis_retry wget -nv -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo apt-key add -
-          travis_retry sudo add-apt-repository -y "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial${CLANG_VERSION/-9} main"
-        fi
+        LLVM_REPO=${COMPILER/clang++/llvm-toolchain-${TRAVIS_DIST}}
+        travis_retry wget -nv -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo apt-key add -
+        travis_retry sudo add-apt-repository -y "deb http://apt.llvm.org/${TRAVIS_DIST}/ ${LLVM_REPO%-10} main"
         travis_retry sudo apt-get -qq update
-        travis_retry sudo apt-get -qy install "clang${CLANG_VERSION}"
         ;;
     esac
 
+install:
+  - if [[ -n ${COMPILER} ]]; then travis_retry sudo apt-get -qy install "${COMPILER/clang++/clang}"; fi
+
 before_script:
-  - if [[ ${TRAVIS_OS_NAME} == linux ]]; then export NODE_LABELS="Linux Ubuntu Ubuntu-16.04"; fi
+  - if [[ ${TRAVIS_OS_NAME} == linux ]]; then export NODE_LABELS="Linux Ubuntu Ubuntu-18.04"; fi
   - if [[ ${TRAVIS_OS_NAME} == osx ]]; then export NODE_LABELS="OSX OSX-${OSX_VERSION}"; fi
   - if [[ ${OSX_VERSION} == 10.12 ]]; then brew update; fi
   # workaround for https://github.com/Homebrew/homebrew-core/issues/26358