code: public BagObject remove (String key) {
          String[] path = Key.split (key);
          int index = binarySearch (path[0]);
          if (index >= 0) {
              if (path.length == 1) {
                  int gapIndex = index + 1;
                  System.arraycopy (container, gapIndex, container, index, count - gapIndex);
                  --count;
              } else {
                  BagObject found = (BagObject) container[index].value;
                  found.remove (path[1]);
              }
          }
          return this;
      }
docs: Remove an object stored at the requested key. The key may be a simple name, or it may be a
  path (with keys separated by "/") to create a hierarchical "bag-of-bags" that is indexed
  recursively.
  <p>
  Using a binary search of the underlying store, finds where the element mapped to the key
  should be, and removes it. If the element doesn't exist, nothing happens. If
  the element is removed, the underlying store is shifted to close the space where it was.
  removing elements will never cause the underlying store to shrink.
  
  @param key A string value used to index the element, using "/" as separators, for example:
  "com/brettonw/bag/key".
  @return The BagObject, so that operations can be chained together.