Make Entry a struct type

* Much more type-checking
* Force callers to use ctors and mutation methods