code: CompletableFuture<Void> addStreamToScope(String name, int streamPosition) {
          // break the path from stream position into three parts --> 2, 4, 4
          String path = getPathForStreamPosition(name, streamPosition);
          return Futures.toVoid(store.createZNodeIfNotExist(path));
      }
docs: Streams are ordered under the scope in the order of stream position.
  The metadata store first calls `getNextStreamPosition` method to generate a new position.
  This position is assigned to the stream and a reference to this stream is stored under the scope at the said position.
  
  ZkScope takes this position number and breaks it into 3 parts of 2, 4, 4 digits respectively.
  Logically following becomes the hierarchy where the stream reference is added under the scope.
  `/01/2345/6789-streamname`
  `01` is called msb.
  `2345` is called middle.
  `6789` is called lsb.
  
  Storing the stream references in such a hierarchy has two advantages --
  1. we divide streams in groups of 10k which can be retrieved via a single zk api call which gives us a logical pagination.
  2. the last 4 digits included with stream ref also gives us the "order" within the group of 10k leaf nodes.
  This enables us to have a continuation token that is not just at group level but for streams within a group too.
  @param name name of stream
  @param streamPosition position of stream
  @return CompletableFuture which when completed has the stream reference stored under the aforesaid hierarchy.