This makes some invalid states unrepresentable, which is something that is desired in this application to reduce mental complexity and to reduce the risk of undesired behaviour of aplying functions like `encrypt` on already encrypted notes. `Note` is now an enum that holds the structs. This approach is similar to the one used in some parts of `std`, though in this case other approaches could be used, but they would be way too much verbose for this use case. This change was done because having functions like `hide` on already hidden functions is not a good idea (even if was they do is "just" cloning the structure...). There are some rough edges, but I'll improve them in another moment.