Dividir una lista en bloques

Dado un arreglo y un tamaño de bloque n, crea un método que divida el arreglo en subarreglos donde cada subarreglo tenga una longitud de n, excepto por un posible subarreglo final más corto.

Ejemplos

Program.chunk(new int[]{1, 2, 3, 4}, 2); // devuelve new int[][]{{1, 2}, {3, 4}}
Program.chunk(new int[]{1, 2, 3, 4, 5, 6, 7}, 3); // devuelve new int[][]{{1, 2, 3}, {4, 5, 6}, {7}}
Program.chunk(new int[]{1, 2, 3, 4, 5}, 10); // devuelve new int[][]{{1, 2, 3, 4, 5}}

Notas

Recuerda que la cantidad de subarreglos puede ser distinta del tamaño del bloque.