code: public Iterable<T> findAllByProperty(final String key, final Object value, final boolean filterByType)
      {
          return ExecutionStatistics.performBenchmarked("GraphService.findAllByProperty(" + key + ")", () -> {
              Class<?> typeSearch = filterByType ? WindupVertexFrame.class : type;
              final Iterator verticesIterator = context.getFramed().getFramedVertices(key, value, typeSearch);
              final List<T> vertices = new ArrayList<>();
  
              verticesIterator.forEachRemaining(v -> vertices.add((T)v));
              if (!filterByType)
                  return vertices;
  
              return (Iterable<T>) () -> {
                  final FilteredIterator.Filter<T> filter = new ModelTypeFilter<>(GraphService.this.type);
                  return new FilteredIterator<T>(vertices.iterator(), filter);
              };
          });
      }
docs: Allows optional filtering by model type, because getVertices(prop, value, type)
  does not filter by model type (it only frames the vertex as that type).
  That can be used to prevent collisions if multiple models use the same property name (e.g. "name").
  
  @param filterByType  If true, the items returned from the graph are further filtered by this service's model type.