New features
unitpar.unit_parser()
A completely new module that allows for computation with units. At the moment, it does not have support for candela, and derived units thereof. Has support for the following base units:
`'s', 'm', 'g', 'A', 'K', 'mol', 'N', 'C', 'kat', 'Hz', 'Bq', 'J', 'Pa', 'W', 'Gy', 'Sv', 'V', 'Wb', 'Ω', 'F', 'S', 'H', 'T', 'eV', 'Da', 'L', 'cal', 'bar', 'Torr'`
which may be used along with a supported prefix:
`'Y', 'Z', 'E', 'P', 'T', 'G', 'M', 'k', 'h', 'da', 'd', 'c', 'm', 'µ', 'n', 'p', 'f', 'a', 'z', 'y'`
Also supports some special units:
`'Å', 'u', 'amu', 'atm', 'min'`
Note importantly that units are denoted with a `unit_identifier`, by default this is set to `' '`, so a unit in any computation should be denoted as `' cm'` e.g. This can in principle be set to anything (but be smart about it). For example if `unit_identifier='~'`, then every unit should be denoted as `'~cm'`.
Regarding the functionality of the units themselves: they act as a multiplicative scalar to whatever is in front of them. This is, however, not true for the case of division. E.g. the expression `'2/5 s'` is read as `'2/(5 s)'` rather than `'(2/5) s`. Thus, it is important to denote, whether the unit is part of the denominator or the numerator. This enables denoting units as e.g. `'2 m/ s'`:
![image](https://user-images.githubusercontent.com/87773847/198370854-a75afcf9-5c36-43a1-8895-da40960a31ea.png)
There is however, an exception to this. If the unit is not an SI unit, and has to be decomposed into other SI units, then this will function sort of in a mixed way and not work correctly. Thus, it is adviced to always use parentheses when dividing, and otherwise use powers whenever possible.
Note also that if the unit result in no unit, the expression will have `'a.u.'` to signal either arbitrary units or that the result is a unitless quantity (see example below).
Currently, the `'sqrt()'` function does not work with units.
modules.NumAn
All constants are now being inserted as a bracket clause, ensuring that the expression is always read as expected. The effect of this can be seen, when choosing `cprint='num'`.
Now also supports definition of a NumAn object, without defining any constants. This allows for much more versatility, when using this class. Naturally, constants may be added at any time still, either by changing the initial definition, or by using `.add_cns()` or `.add_res()`
Now also support usage of units in computations. This works both for added constants and the calculation expressions:
![image](https://user-images.githubusercontent.com/87773847/198371144-51b75c00-d1f0-4732-afb3-e67a8e7969ad.png)
Note importantly that now by default, all natural constants have a unit attached to them. This can have unintended consequences if the script is used to calculate without units. To avoid issues with this, a new optional parameter in NumAn has been made. If no units is desired, set `units=False`.
.calc()
Added cprint options `'sym_ex'` and `'symc_ex'`, which allows for printing the input expression with explicit multiplication (see example above). Note that `cprint='num'` now always displays explicit multiplication, in addition to having all constants displayed as numbers, always.
mathpar.parser()
Added electron mass `'_me'` and proton mass `'_mp'` as natural constants.