code: public Iterator<?> getBshIterator(final Object obj) {
          if (obj == null)
              return this.emptyIt();
          if (obj instanceof Primitive)
              return this.getBshIterator(Primitive.unwrap(obj));
          if (obj.getClass().isArray())
              return this.arrayIt(obj);
          if (obj instanceof Iterable)
              return this.getBshIterator((Iterable<?>) obj);
          if (obj instanceof Iterator)
              return this.getBshIterator((Iterator<?>) obj);
          if (obj instanceof Enumeration)
              return this.getBshIterator((Enumeration<?>) obj);
          if (obj instanceof CharSequence)
              return this.getBshIterator((CharSequence) obj);
          if (obj instanceof Number)
              return this.getBshIterator((Number) obj);
          if (obj instanceof Character)
              return this.getBshIterator((Character) obj);
          if (obj instanceof String)
              return this.getBshIterator((String) obj);
          return this.reflectNames(obj).iterator();
      }
docs: Inspect the supplied object and cast type to delegates.
  @param obj the value to iterate of unknown type.
  @return the bsh iterator