Add ManagedPtr type

A ManagedPtr is just like a Ptr, except it points to memory inside
Idris' heap, so doesn't need to be freed. This is useful when you need
to create a structure C side for interacting with a C library, but don't
want to have to explicitly free it.

Also added
registerPtr : (p : Ptr) -> (n : Int) -> ManagedPtr

This moves the n bytes pointed to by p into the Idris heap.

In a non-C backend, or one where memory is managed differently, it's
entirely reasonable for this to be compiled as a no-op. The FFI treats
both Ptr and ManagedPtr as a void* in C.