Split structs into separate files

Organized the source repository by splitting up the main file.