code: static PortablePosition findPositionForReading(
              PortableNavigatorContext ctx, String pathString, PortablePathCursor path) throws IOException {
          // just a a single attribute path - e.g. reading a field
          PortablePosition result = findPositionForReadingAssumingSingleAttributePath(ctx, pathString, path);
          if (result != null) {
              return result;
          }
          // nested path or path with array quantifier
          return findPositionForReadingComplexPath(ctx, pathString, path);
      }
docs: Main method that enables navigating in the Portable byte stream to find the element specified in the path.
  The path may be:
  - simple -> which means that it includes a single attribute only, like "name"
  - nested -> which means that it includes more than a single attribute separated with a dot (.). like person.name
  <p>
  The path may also includes array cells:
  - specific quantifier, like person.leg[1] -> returns the leg with index 0
  - wildcard quantifier, like person.leg[any] -> returns all legs
  <p>
  The wildcard quantifier may be used a couple of times, like person.leg[any].finger[any] which returns all fingers
  from all legs.
  <p>
  Returns a {@link PortablePosition} that includes the type of the found element and its location in the stream.
  E.g. car.wheels[0].pressure -> the position will point to the pressure object
  
  @param ctx  context of the navigation that encompasses inputStream, classDefinition and all other required fields
  @param path pathCursor that's required to navigate down the path to the leaf token
  @return PortablePosition of the found element. It may be a PortableSinglePosition or a PortableMultiPosition
  @throws IOException in case of any stream reading errors