NEW: Doxygen theme refresh

See screenshots attached to the PR for example.
Merge pull request #2070 from primalmotion/doxygen-theme-refresh

NEW: Doxygen theme refresh [+3]
First round of changes to change theming system to use arrays and not bitmasks as their underlying datatype
Get jaking working
Handle null inputs for subtracting CPThemes.
Change CPTheme to be hash-backed to make it a bit faster
Fix bug when setting themeStates in a themeAttribute
Fix accidental semicolon
Change CPTheme implementation to fix how searching for a matching theme works
Fix subtracting theme states
Get all tests to pass
Clarify documentation for CPThemeState()
Some cleanup of CPSegmentedControl.j
Add note to ThemeState object about it being private
Fix bugs with CPThemeAttribute encoding and decoding
All ThemeStates always have at least one state - the normal state
Remove unused method in CPTheme
Fix bug that was turning dictionary keys into objects
New: Added bidirectional CPLevelIndicator behaviour

Depending on whether min < max or max > min CPLevelIndicator changes the order of the normal/warning/critical color. This commit enables this behavior for both cases.
Add new unit tests for CPView