Add Compilation Features

This is quite a huge pull request, making a lot of modifications, because I fixed some architectural problems directly in this branch instead of in master.
That's a really bad practice, I can only agree with this, but, well, this is still the start of the project and the architecture is not really stabilized.