Represents sizes in bytes and bits making use of familiar C number types and SI conventions.
size must define the keys:
When defined/set, it must accept the following values (full words are case-insensitive):
Passing a string with only a number should generate an error regarding missing units.
The X and XX above are standing in place of short and full SI prefixes. The size type can only use positive power prefixes. In the SI unit cases with prefixes, it may be possible to use float values as the #.
SI scaling units that should be supported (X, XX: power, where the power is in # * scale ^ power):
When retrieved as a number, it must return the number of bytes, rounded up.
When retrieved as a string, it should return the original string, if it was defined as a string. Otherwise it should return the "# bytes" (or whatever the locale's default is) form.
When stringified, it should prefer named equalities, then appropriate (eg. consider plurality) long-form locale defaults of the highest SI it can.