Change typespec guards to keyword list

Previous syntax: `@spec fun(a) :: b when is_var(a) and is_subtype(b, [a])`
New syntax: `@spec fun(a) :: b when a: var, b: [a]`

Also changes `Macro.to_string` to not print `[]` for keyword lists in tuples, lists and when. Unsure if we should do it for tuples and lists, maybe it is too confusing?