Exit Code Mappings
Default behaviour of an exit codes is as:
- 
Errors from a command option parsing will result to a code of
2 - 
Any generic error will result to a code of
1 - 
Obviously in any other case will result to a code of
0 
Every CommandRegistration can define its own mappings between Exception and exit code.
Spring shell uses a similar approach to Spring Boot regarding exit code and simply
integrate into that.
Assuming there is an exception shown below which would be thrown from a command:
static class MyException extends RuntimeException {
	private final int code;
	MyException(String msg, int code) {
		super(msg);
		this.code = code;
	}
	public int getCode() {
		return code;
	}
}
It is possible to define a mapping function between Throwable and exit code. You can also
just configure a class to exit code which is just a syntactic sugar within configurations.
CommandRegistration.builder()
	.withExitCode()
		.map(MyException.class, 3)
		.map(t -> {
			if (t instanceof MyException) {
				return ((MyException) t).getCode();
			}
			return 0;
		})
		.and()
	.build();
| Exit codes cannot be customized with annotation based configuration |