Made vector immutable rather than using static methods
Also length is nicer to get (`len(v)` or `v.magnitude`)