Refactored metafunction to include a context, and removed the need for specializing `is_metafunction`

Signed-off-by: K-ballo <k@fusionfenix.com>