Built-in keyword and lockdown of extending structs

This introduces the "builtin" keyword, which modifies the behaviour of a
struct. Built-in structs cannot be instantiated directly and they cannot
be extended by non-built-in (i.e. user) structs. Also locks down
extending structs so that a managed struct cannot extend an unmanaged
one and vice versa.