EnumMap implementation

PR for #6 

* based on `SplObjectStorage`
* doesn't order enums by their ordinal number
* auto-instantiate scalar values
* allows only enums of the same type as given on constructor (not `instanceof`)
* allows to define return value behaviour for `key()` and `current()` used by iterating over `foreach`