Two constants are defined in StringExtensions:
UmbracoValidAliasCharacters
UmbracoInvalidFirstCharacters

They were used exclusively by umbraco/js/UmbracoCasingRules.aspx.cs to define some JavaScript variables
which in turn were used by genericProperty.js to provide validation for aliases.

UmbracoCasingRules.aspx and genericProperty.js are used in:
  Umbraco.Web\umbraco.presentation\umbraco\controls\ContentTypeControlNew.ascx
  Umbraco.Web\umbraco.presentation\umbraco\controls\GenericProperties\GenericProperty.ascx

genericProperty.js defined the following functions:
  safeAlias(alias) : provides a safe alias version of alias
  isValidAlias(alias) : whether an alias is safe
  checkAlias(id) : plugs a safe alias validator / corrector on an element
  duplicatePropertyNameAsSafeAlias(propertyId, aliasId) : creates the alias from the prop. name

These are used to validate the alias of the content type, and of properties. No other alias in
Umbraco back-end seem to be validated in UI at that point. And, there seem to be no server-side
validation so the server just seems trust the UI.

Whereas in theory, we should only accept that the casing required by the user is different
from what our "toSafeAlias" method would provide, anything else is a validation error.

Legacy safe aliases accept leading and trailing dashes and underscores.

REFACTOR

Abstract string methods into IShortStringHelper, and create a new DefaultShortStringHelper which
re-implements methods in a clean nice way. The new aliases do not accepts dashes, nor leading
underscores.

Entirely refactor StringExtensions to rely on IShortStringHelper (via a resolver).

The constants in StringExtensions should go, but we keep them for backward compatility.
The legacy helper is 100% backward compatible even at JavaScript level, but the new helper
is NOT, it does server-side validation of aliases, all sorts of things, using an api service.

UmbracoCasingRules.aspx.cs is _gone_ in all cases, replaced by the JavaScript served by
the api service.
