Fix encoding issues and switch to slice of updates

Gob has some weird issues around encoding interfaces.

The biggest consequences here are:
- The `update` interface no longer includes `GobEncode()` and `GobDecode()`
- Any types that satisfy `update` must be registered by calling `gob.Register()` during initialization.