At a later date we might want to investigate simpler ways to do this.  The [MDN docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) suggest that if you leave `set` undefined it will automatically be non-settable (and will throw in strict mode).

You can also define a non-writable property with a static value, meaning you don't need a getter _or_ a backing property either.  (If assume the values could be changed by reinvoking defineProperty(), to handle cases like rename, then this would be viable for us).