Name and print top types consistently

For code review.

The only concern I have is if we are making these types consistent, we should make them consistent in the right way. Do we prefer to have `FooTop` or `Foo`? Currently only `VectorTop` and `(Struct ...)` can actually be written in user code, but the former prints as `Vector`. This PR makes all of these types print and read as `FooTop` except the struct top type.