code: function getPositionsWhereCanIGo(board, from) {
      if (!from)
          return null;
      const allNearPositions = getNearPositions(board, from);
      return allNearPositions.reduce((positions, nearPosition) => {
          if (Position.hasNoPiece(nearPosition))
              return positions.concat(nearPosition);
          const jumpTo = getJumpPosition(from, nearPosition, board);
          if (!jumpTo)
              return positions;
          return whereCanIJump(board, jumpTo, positions.concat(jumpTo));
      }, []);
  }
docs: Gets all near positions and reduce. Foreach near position checks:
  - Has no piece: concat positions and return.
  - Has piece:
  1. Get jump position, if jump position do not exists return prev positions.
  2. Concat jump to positions then call whereCanIJump() and return it.