File uses copy-and-swap idiom, move ctor

github issue #17 #13 and #19