lib: add standard/error.nit

This could help people to implement some error handling in libraries.

It is inspired by #701 and ideas from Alexandre Terrasa.

Un truc facile qui montre comment on s'en sert:

First you need to implement the `Error` interface:

    class DivByZeroError
        super Error
    
        redef var message: Int
    end

> En fait cet exemple pourrait carrément aller dans la doc de Error.

Then  you can use it to return custom errors:

    fun div(a, b: Int): MaybeError[Int, Error] do
        if b == 0 then
            var err = new DivByZeroError("Arithmetic Error: try to divide {a} by 0")
            return new MaybeError(null, err)
        end
        return new MaybeError(a / b, null)
    end

> Hum juste à écrire ces deux exemples je trouve ça déjà trop verbeux...

The client has to handle the error:

    var res = div(10, 1)
    if res.is_error then
        print res.maybe_error.message
        exit 0
    end
    print res.maybe_value.to_s

Quelques possibilités:

* Avoir une classe d'erreur par défaut prête à l'emploi comme `Exception` en Java ça évite des classes inutiles comme DivByZero quand le typage sert à rien. Mais je vois l'intérêt de forcer les sous-types en même temps donc je sais pas...

* Les constructeurs nommés pour éviter les `null`:

        return new MaybeError(e, null)
        return new MaybeError.with_value(e)

    Juste en terme de doc c'est cool.

* Retirer les maybe de MaybeError? `error` et `value` tout simplement?