Fix Storage interface and introduce null-friendly wrapper

Fix Storage interface:
- Method getItem returns string.
- It's possible to use property accessors to handle values in storage but this is not
   the part of standard. Also there can be confusion because any object can be written
   into property of storage object but when property is read string value is always
   returned.

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

Introduce wrapper of Storage interface where null-returning methods are replaced
with option-retuning ones.
This should probably be a pair of getter and setter instead. Otherwise the property is just read once when `Storage` is created, then it's not updated afterwards/changes to it are not reflected in the underlying `dom.Storage`:
```scala
def length: Int = domStorage.length
def length_=(v: Int): Unit = domStorage.length = v
```