Add support for spy objects

This PR adds support for `@IMPLEMENTS` (cause it is required for the Dart version of spies to work). At some point AtScript will get support for interfaces. Once it happens, we should replace 

```
@IMPLEMENTS(Interface)
class MyClass {}
```

with

```
class MyClass implements Interface {}
```

Could we check the value of the `@IMPLEMENTS` annotation instead of just returning `true`? With that we would still get assertion errors when you pass in the wrong spy object into a function...