_subset and __getitem__ now avoid copying

change improves performance, reducing the time for the follow test script from
~10 seconds to ~5 seconds

    import numpy as np
    import karta

    xy = np.random.rand(10000, 2)
    mp = karta.Multipoint(xy, crs=karta.CARTESIAN)
    square = karta.Polygon([(0.3,0.3), (0.3,0.7), (0.7,0.7), (0.7,0.3)], crs=karta.CARTESIAN)

    buffmp = karta.Multipoint([pt for pt in mp if square.shortest_distance_to(pt) < 0.05])