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.
With keyword `final` it's impossible to create singletons like
```scala
object SessionStorage extends Storage(dom.window.sessionStorage)
```