Serializable updates and better variable names.

  - Noticed that the previous readObject and writeObject methods would be incompatible with each other.
  - No longer using default(Read|Write)Object since we serialize all the relevant fields manually.
  - Added unit tests to verify roundtrip serialization equality.
  - New serialVersionUID value due to stream format changes.