Divisão de uma lista em blocos

Dado um array e um tamanho de bloco n, crie um método que divida o array em subarrays, cada um com comprimento n, exceto por um possível subarray final mais curto.

Exemplos

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

Observações

Lembre-se de que a quantidade de subarrays pode ser diferente do tamanho do bloco.