Have filenode::parse return a shared pointer

This works around a bug in older G++ versions (like the one on Debian)
where it appears they are unable to handle the implicit copy operator.