arrApply: High Performance Variant of apply()

Description

High performance variant of apply() for a fixed set of functions.
Considerable speedup is a trade-off for universality, user defined
functions cannot be used with arrApply. However, 20 most currently employed
functions are available for usage. They can be divided in three types:
reducing functions (like mean(), sum() etc., giving a scalar when applied to a vector),
mapping function (like normalise(), cumsum() etc., giving a vector of the same length
as the input vector) and finally, vector reducing function (like diff() which produces
result vector of a length different from the length of input vector).
Optional or mandatory additional arguments required by some functions
(e.g. norm type for norm() or normalise() functions) can be
passed as named arguments in '...'.

RcppArmadillo is used to do the job in very fast way but it comes at price
of not allowing NA in the input numeric array.
Vectors are allowed at input. They are considered as arrays of dimension 1.
So in this case, idim can only be 1.

Value

output array of dimension cut by 1 (the idim-th dimension
will disappear for reducing functions) or of the same dimension
as the input arr for mapping and vector reducing
functions. For vector reducing functions, the idim-th dimension
will be different from idim-th dimension of arr.
The type of result (numeric or logical) depends on the function applied,
logical for all() and any(), numerical – for all other functions.