func asDictionary<K, V>(any: Any, type: (key: K.Type, value: V.Type) = (K.self, V.self)) -> [K: V]? {
    let mirror = Mirror(reflecting: any)
    
    let properties = mirror.children
    
    guard let displayStyle = mirror.displayStyle where displayStyle == .Dictionary else {
        return nil
    }
    
    var dictionary = [K: V]()
    
    for property in properties {
        let pair = Array(Mirror(reflecting: property.value).children)
        
        if let key = pair[0].value as? K, let value = pair[1].value as? V {
            dictionary[key] = value
        } else {
            return nil
        }
    }
    
    return dictionary
}