changed some of the structure; added abstract "user_data" function that will be called when a chunk is saved to disk