Currently we need to write smth like
`select arrayFilter(...)[-1]`
to get the last element. 
At the same time, we have `arrayFirst` function for the first element of array.

I think clickhouse community need analogy of function arrayFirst, but for last element.

My proposal is arrayLast function:
```
select range(10)                               as arr,
       arrayFirst((a)->(a > 3 and a < 8), arr) as first_element,
       arrayLast((a)->(a > 3 and a < 8), arr)  as last_element
```
with result
![image](https://user-images.githubusercontent.com/4305175/148060114-81e83e9b-e02e-499e-8e1c-b48e99e46f02.png)

#include <DataTypes/DataTypesNumber.h>
#include <Columns/ColumnsNumber.h>
#include "FunctionArrayMapped.h"
#include <Functions/FunctionFactory.h>
namespace DB
{
namespace ErrorCodes
{
    extern const int ILLEGAL_COLUMN;
}
struct ArrayFirstImpl
{
    static bool needBoolean() { return false; }
    static bool needExpression() { return true; }
    static bool needOneArray() { return false; }
    static DataTypePtr getReturnType(const DataTypePtr & , const DataTypePtr & array_element)
    {
        return array_element;
    }
    static ColumnPtr execute(const ColumnArray & array, ColumnPtr mapped)