Here invert returns the pseudoinverse when the input is not invertible.
To this end, also implements (rudimentary) conversion of Complex to NumberT,
an identity method that produces identity matrices, determinant, and
the adjoint operation on matrices (conjugate transpose).
So far, abs, add, norm, normsq, and sum are supported. To get them
to work, also implements the following:
* refactor: Use ReturnType function rather than just accessing .returns
* feat: distinguish marking a function as a behavior from its return type
* refactor: Rename `NotAType` to `Unknown` because it must be made closer
to a bona fide type for the sake of inhomogeneous vectors
* feat: make resolving a TypeDispatcher method on a type vector including
`Unknown` into a no-op; that simplifies a number of generic behaviors
* feat: add `haszero` method parallel to `hasnan`
* feat: track the Vector nesting depth of Vector specializations
Toward its goal, this commit also:
* Adds a new section of logical functions, and defines `not`, `and`,
`or` for all current types.
* Extends `OneOf` choice/union type to allow argument types that are
themselves `OneOf` types.
* Adds a readable .toString() method for TypePatterns.
* Defines negate (as a no-op) and isnan (as always true) for the Undefined
type
* Extends comparisons to the Undefined type (to handle comparing vectors
of different lengths)