code: @Override
      public Object getObject (String key) {
          // separate the key into path components, the "local" key value is the first component, so
          // use that to conduct the search. We are only interested in values that indicate the search
          // found the requested key
          String[] path = Key.split (key);
          int index = binarySearch (path[0]);
          if (index >= 0) {
              // grab the found element... if the path was only one element long, this is the element
              // we were looking for, otherwise recur on the found element as another BagObject
              Pair pair = container[index];
              Object found = pair.value;
              return (path.length == 1) ? found : ((Bag) found).getObject (path[1]);
          }
          return null;
      }
docs: Return an object stored at the requested key value. 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 first component of the path
  should be and returns it.
  
  @param key A string value used to index the element, using "/" as separators, for example:
  "com/brettonw/bag/key".
  @return The indexed element (if found), or null