Hello World

- AST changes
  - Expressions cannot be statements
  - functional calls can be expressions or statements
- refactor AST printing to be uniform and separated from the types declaration
  - removed redundant print methods
- split SAST variable declarations and assignments into two different types
- split SAST checks, printing and helper methods into separate files
- add string literals support in code generation

# - Got Hello World to Compile and Test in CI!
It means that [these expressions](https://github.com/rapid-lang/rapid/blob/hello_world/compiler/ast.mli#L4) cannot be free-standing statements.

I did not think that it was a good idea to have assign be an expression. Looking at the LRM I can't find anywhere that we stated whether it was meant to be one of the two.

The only reason I can think of for making it an expression is to allow C-like patterns like:

```c
bool a;
if (a = foo()) {
  // do something
}
```

Limiting variable changes to declarations and assignments also simplifies things in the semantic checking while building the lookup table (at least in my current implementation that's a WIP).

Checking the parser is a good way to understand sections of the AST:
https://github.com/rapid-lang/rapid/blob/6e92681dc9dca62352fc01447c7608a20201dfce/compiler/parser.mly