text: Title: Book deltas not working for Gateio and Kucoin
  Body: **Describe the bug**
  Book deltas not working using Gateio and Kucoin
  
  **To Reproduce**
  Run the `demo_book_delta.py` example with Gateio and Kucoin:
  
  ```python
  from copy import deepcopy
  
  from cryptofeed import FeedHandler
  from cryptofeed.callback import BookCallback, BookUpdateCallback
  from cryptofeed.defines import BID, ASK, BOOK_DELTA, L2_BOOK, L3_BOOK
  from cryptofeed.exchange.blockchain import Blockchain
  from cryptofeed.exchange.gateio import Gateio
  from cryptofeed.exchange.kucoin import KuCoin
  
  class DeltaBook(object):
      def __init__(self, name):
          self.book = None
          self.name = name
          self.L2 = {L2_BOOK: BookCallback(self.handle_book),
                     BOOK_DELTA: BookUpdateCallback(self.handle_l2_delta)}
  
      def check_books(self, master):
          """Check that master is equal to self.book."""
          for side in (BID, ASK):
              if len(master[side]) != len(self.book[side]):
                  return False
  
              for price in master[side]:
                  if price not in self.book[side]:
                      return False
  
              for price in self.book[side]:
                  if price not in master[side]:
                      return False
          return True
  
      async def handle_book(self, feed, symbol, book, timestamp, receipt_timestamp):
          """Handle full book updates."""
          if not self.book:
              self.book = deepcopy(book)
              print("%s: Book Set" % self.name)
          else:
              assert(self.check_books(book))
              print("%s: Books match!" % self.name)
  
      async def handle_l2_delta(self, feed, symbol, update, timestamp, receipt_timestamp):
          """Handle L2 delta updates."""
          # handle updates for L2 books
          for side in (BID, ASK):
              for price, size in update[side]:
                  if size == 0:
                      del self.book[side][price]
                  else:
                      self.book[side][price] = size
          print(feed, symbol, update, timestamp, receipt_timestamp)
  
  def main():
      f = FeedHandler()
      f.add_feed(Gateio(max_depth=25, book_interval=100, symbols=['BTC-USDT'], channels=[L2_BOOK], callbacks=DeltaBook("Gateio").L2))
      f.add_feed(KuCoin(max_depth=10, book_interval=100, symbols=['BTC-USDT'], channels=[L2_BOOK], callbacks=DeltaBook("Kucoin").L2))
      f.run()
  
  
  if __name__ == '__main__':
      main()
  ```
  
  Errors out with:
  ```python
  Gateio: Book Set
  2021-05-22 21:54:27,416 : ERROR : KUCOIN.ws.3: encountered an exception, reconnecting in 1.0 seconds
  Traceback (most recent call last):
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/connection_handler.py", line 63, in _create_connection
      await self._handler(connection, self.handler)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/connection_handler.py", line 112, in _handler
      await handler(message, connection, self.conn.last_message)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/exchange/kucoin.py", line 218, in message_handler
      await self._l2_book(msg, symbol, timestamp)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/exchange/kucoin.py", line 201, in _l2_book
      await self.book_callback(self.l2_book[symbol], L2_BOOK, symbol, forced, delta, timestamp, timestamp)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/feed.py", line 250, in book_callback
      delta, book = await self.apply_depth(book, True, symbol)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/feed.py", line 305, in apply_depth
      delta = book_delta(self.previous_book[symbol], ret)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/util/book.py", line 36, in book_delta
      fkeys = set(list(former[side].keys()))
  KeyError: 'bid'
  2021-05-22 21:54:28,044 : ERROR : GATEIO.ws.2: encountered an exception, reconnecting in 1.0 seconds
  Traceback (most recent call last):
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/connection_handler.py", line 63, in _create_connection
      await self._handler(connection, self.handler)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/connection_handler.py", line 112, in _handler
      await handler(message, connection, self.conn.last_message)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/exchange/gateio.py", line 234, in message_handler
      await self._l2_book(msg, timestamp)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/exchange/gateio.py", line 179, in _l2_book
      await self.book_callback(self.l2_book[symbol], L2_BOOK, symbol, forced, delta, ts, timestamp)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/feed.py", line 282, in book_callback
      await self.callback(L2_BOOK, feed=self.id, symbol=symbol, book=book, timestamp=timestamp, receipt_timestamp=receipt_timestamp)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/feed.py", line 296, in callback
      await cb(**kwargs)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/callback.py", line 57, in __call__
      await super().__call__(feed, symbol, book, timestamp, receipt_timestamp)
    File "/Users/yaser/Documents/dex-cex-arbitrage/.direnv/python-3.7.7/lib/python3.7/site-packages/cryptofeed/callback.py", line 21, in __call__
      await self.callback(*args, **kwargs)
    File "/Users/yaser/Documents/dex-cex-arbitrage/demo_book_delta_simple.py", line 46, in handle_book
      assert(self.check_books(book))
  AssertionError
  2021-05-22 21:54:31,389 : ERROR : KUCOIN.ws.3: encountered an exception, reconnecting in 2.0 seconds
  ...
  ```
  
  **Expected behavior**
  Should be able to receive / update order books same as with the rest of the exchanges
  
  **Operating System:**
   - macOS
  
  **Cryptofeed Version**
  
  `pip install cryptofeed==1.9.0`
  